为什么在分配变量内存时,不同控制台的python个脚本运行会相互影响?
Why in allocating variable memory, python scripts running in different consoles affect each other?
我使用两个控制台来运行 python脚本。一个是cmd控制台,另一个是pycharm控制台。令我惊讶的是,结果似乎两个不同的控制台共享相同的内存 space。详细信息如下图所示。有四种现象,我很困惑。
现象一:不同控制台的变量分配在同一个地址
在cmd控制台,我创建了三个变量,'a'(地址是0x7ffaf8346290
),'b'(地址是0x7ffaf83462b0
),'c'(地址是0x7ffaf83462d0
)。
在pycharm控制台中,我创建了两个变量,'a'(地址是0x7ffaf8346290
)和'b'(地址是0x7ffaf83462b0
)。
现象2:同一个地址的变量,两个控制台无法访问
'c' 指向 cmd 控制台中的地址 0x7ffaf83462d0
。在pycharm控制台中,3
的地址是0x7ffaf83462d0
,但是无法访问'c'。
现象三:一个控制台创建的变量,被另一个控制台分配内存影响
在pycharm控制台中,我创建了另外两个变量c=5
(地址是0x7ffaf83462f0
)和d=6
(地址是0x7ffaf8346310
)。
有趣的是,在cmd控制台中,5
的地址是0x7ffaf8346310
,与pycharm控制台中的地址相同。而6
的地址是0x7ffaf8346330
,顺序增长。
现象四:列表对象似乎不受影响
我在两个控制台分别创建了两个列表[1,2,3,4]
,两个的地址好像是分开的
很可能,您的两个控制台使用一个 Python 引擎。 Python 引擎运行一个负责内存分配和操作的虚拟机。您可以在其他地方阅读 Python 基础知识,尝试谷歌搜索 Python 虚拟机 (PVM)。
您的两个 Python 会话完全不会相互影响。他们不以任何方式共享内存。现代操作系统使用 虚拟内存 ,其中每个进程都有自己的虚拟内存地址到物理 RAM(或文件或其他可以内存映射的奇怪事物)的映射。这意味着两个进程可以同时为不同的事物使用相同的虚拟内存地址而不会相互影响。
仅保证同一进程中具有重叠生命周期的不同对象的 ID 值不同。
我使用两个控制台来运行 python脚本。一个是cmd控制台,另一个是pycharm控制台。令我惊讶的是,结果似乎两个不同的控制台共享相同的内存 space。详细信息如下图所示。有四种现象,我很困惑。
现象一:不同控制台的变量分配在同一个地址
在cmd控制台,我创建了三个变量,'a'(地址是0x7ffaf8346290
),'b'(地址是0x7ffaf83462b0
),'c'(地址是0x7ffaf83462d0
)。
在pycharm控制台中,我创建了两个变量,'a'(地址是0x7ffaf8346290
)和'b'(地址是0x7ffaf83462b0
)。
现象2:同一个地址的变量,两个控制台无法访问
'c' 指向 cmd 控制台中的地址 0x7ffaf83462d0
。在pycharm控制台中,3
的地址是0x7ffaf83462d0
,但是无法访问'c'。
现象三:一个控制台创建的变量,被另一个控制台分配内存影响
在pycharm控制台中,我创建了另外两个变量c=5
(地址是0x7ffaf83462f0
)和d=6
(地址是0x7ffaf8346310
)。
有趣的是,在cmd控制台中,5
的地址是0x7ffaf8346310
,与pycharm控制台中的地址相同。而6
的地址是0x7ffaf8346330
,顺序增长。
现象四:列表对象似乎不受影响
我在两个控制台分别创建了两个列表[1,2,3,4]
,两个的地址好像是分开的
很可能,您的两个控制台使用一个 Python 引擎。 Python 引擎运行一个负责内存分配和操作的虚拟机。您可以在其他地方阅读 Python 基础知识,尝试谷歌搜索 Python 虚拟机 (PVM)。
您的两个 Python 会话完全不会相互影响。他们不以任何方式共享内存。现代操作系统使用 虚拟内存 ,其中每个进程都有自己的虚拟内存地址到物理 RAM(或文件或其他可以内存映射的奇怪事物)的映射。这意味着两个进程可以同时为不同的事物使用相同的虚拟内存地址而不会相互影响。
仅保证同一进程中具有重叠生命周期的不同对象的 ID 值不同。