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相同的更改。 这与计算机内存的深层理论有关吗?
答案 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]