объект Python два списка не работает как обычно - PullRequest
0 голосов
/ 09 мая 2019
l=[1,2,3];
l2=l
l.append(4)

когда я добавляю 4, то у l2 также будет 4, поскольку они делят память. но как объяснить код ниже:

l=[1,2,3]
l2=l
l=[]
l.append(4)

на этот раз l2 не будет иметь таких же изменений, как l. Разве это как-то связано с глубокой теорией компьютерной памяти.

1 Ответ

0 голосов
/ 09 мая 2019

проверьте отличное объяснение Неда Батчеледера - Факты и мифы об именах и значениях Python

Короче говоря, первоначально list1 и list2 относятся к одному и тому же объекту.списки изменчивы, поэтому при добавлении к объекту это все тот же объект, на который ссылаются два разных имени.После назначения пустого списка для list1, он ссылается на другой объект, в то время как list2 по-прежнему ссылается на оригинальный список

>>> list1 = [1, 2, 3]
>>> list2 = list1
>>> id(list1)
140533230706312
>>> id(list2)
140533230706312
>>> list1.append(4)
>>> list1
[1, 2, 3, 4]
>>> list2
[1, 2, 3, 4]
>>> id(list1)
140533230706312
>>> id(list2)
140533230706312
>>> list1 = []
>>> id(list1)
140533231045704
>>> id(list2)
140533230706312
>>> list2
[1, 2, 3, 4]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...