Почему при выделении переменной памяти скрипты python, запущенные в разных консолях, влияют друг на друга? - PullRequest
0 голосов
/ 06 апреля 2020

Я использую две консоли для запуска python скрипта. Один - консоль cmd, а другой - консоль pycharm. Что меня удивляет, так это то, что результаты кажутся двумя разными консолями в одном и том же пространстве памяти . Детали, как показано на рисунках. Я путаюсь с четырьмя явлениями.

Явление 1: переменные в разных консолях, размещенные на одном и том же адресе

В консоли cmd я создаю три переменные, 'a' (адрес 0x7ffaf8346290), b (адрес 0x7ffaf83462b0) и c (адрес 0x7ffaf83462d0).

В консоли pycharm я создаю две переменные: «a» (адрес 0x7ffaf8346290) и «b» (адрес 0x7ffaf83462b0).

Явление 2: переменные в одном и том же адресе, недоступны для двух консолей

'c' указывает на адрес 0x7ffaf83462d0 в консоли cmd. В консоли pycharm адрес 3 равен 0x7ffaf83462d0, но доступ к c невозможен.

Явление 3: переменные, созданные одной консолью, зависят от другой консоли, выделяющей память

В консоли pycharm я создаю две другие переменные c=5 (адрес 0x7ffaf83462f0) и d=6 (адрес 0x7ffaf8346310).

Интересно, что в консоли cmd адрес 5 равен 0x7ffaf8346310, так же, как адрес в консоли pycharm. И адрес 6 равен 0x7ffaf8346330 с последовательным ростом.

Явление 4: объект списка, кажется, не затронут

Я создаю два списка [1,2,3,4] в двух консолях соответственно, и адреса двух, кажется, отделены друг от друга.

cmd console pycharm console

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Ваши две Python сессии не влияют друг на друга вообще. Они никак не разделяют память. Современные операционные системы используют виртуальную память , где каждый процесс имеет свое собственное сопоставление адресов виртуальной памяти с физической ОЗУ (или файлами или другими странными вещами, которые могут отображаться в памяти). Это означает, что два процесса могут использовать один и тот же адрес виртуальной памяти для разных вещей в одно и то же время, не влияя друг на друга.

Значения идентификатора гарантированно различаются только для разных объектов в одном и том же процессе с перекрывающимися временами жизни.

0 голосов
/ 06 апреля 2020

Скорее всего, ваши две консоли используют один Python движок. Механизм Python запускает одну виртуальную машину, которая отвечает за распределение памяти и манипулирование ею. Вы можете прочитать основы Python в другом месте, попробовать поискать виртуальную машину Python (PVM).

...