Python的两个列表对象没有像往常一样

时间:2019-05-09 19:20:40

标签: python list

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

当l追加4时,则l2也将拥有4,因为它们共享内存。 但是如何解释以下代码:

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

这一次,l2将不再具有与l相同的更改。 这与计算机内存的深层理论有关吗?

1 个答案:

答案 0 :(得分:0)

检查Ned Batcheleder的出色解释-Facts and myths about Python names and values

长话短说,最初的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]