zarządzanie pamięcią w Pythonie polega prywatną lokalizację pamięci sterty zawierający wszystkie obiekty Python i struktur danych.
Środowisko wykonawcze języka Python zajmuje się tylko odniesieniami do obiektów (które wszystkie żyją w stercie): to, co dzieje się na stosie Pythona, zawsze odnosi się do wartości, które znajdują się gdzie indziej.
>>> a = [1, 2]
>>> b = a
>>> a.append(3)
Tutaj widzimy wyraźnie, że zmienna b
jest zobowiązany do tego samego obiektu jako a
.
Możesz użyć operatora is
do sprawdzenia, czy dwa obiekty są fizycznie takie same, co oznacza, że mają ten sam adres w pamięci. Można to przetestować również przy użyciu funkcji id()
.
>>> a is b
>>> True
>>> id(a) == id(b)
>>> True
Tak więc, w tym przypadku, trzeba wyraźnie poprosić o kopię. Gdy to zrobisz, nie będzie już żadnego połączenia między dwoma różnymi obiektami listy.
>>> b = list(a)
>>> a is b
>>> False
możliwe duplikat [Jak sklonować listę w Pythonie?] (Http://stackoverflow.com/questions/2612802/how-to-clone-a-list-in-python) –
@Felix Powiedziałbym, że nie do końca dup - nie pyta tylko, jak klonować, ale raczej dlaczego Python zachowuje się w określony sposób. – thegrinner
"[Python ma nazwy] (http://python.net/~goodger/projects/pycon/2007/idiomatic/presentation.html#python-has-names)" jest bardzo dobrą częścią jeszcze lepszego samouczka/wprowadzenia w związku z tym zachowanie. – nagisa