[英]What mutable object really means in Python
我对可变 object 的真正含义感到很困惑
A=[1,3,4]
print(id(A))
A.append(1)
print(id(A))
打印输出显示相同的地址,而对于以下
A=[1,3,4]
print(id(A))
A=A+[1,2]
print(id(A))
第一件事是它不会报告错误,因为我期望它是可变的,它会执行迭代过程,另一方面,地址是不同的。
当你这样做
A = [1,2,3]
A.append(1)
您在适当的位置修改列表,因此不会导致其地址发生变化。 另一方面,当你这样做
A = [1,2,3]
A = A + [1,2]
您创建一个临时的新 object A + [1,2]
然后将现有列表A
重新绑定到这个新创建的 object (即新创建的列表),从而更改其地址/id。
第一个示例通过调用append()
来改变列表。 所以object的id()
每次都是一样的。
第二个示例将变量A
重新分配给一个新列表,该列表是连接两个列表的结果。 这不会改变原始列表。 要了解原因,让我们做一个小修改:
A=[1,3,4]
print(id(A))
B=A+[1,2]
print(id(A))
print(id(B))
现在您将看到id(A)
两次都相同。 除了您不再引用第一个列表之外,您的原始代码等效于此。
A = [1,2,3]
A.append(4) #just appends new element to list (but does not create new memory address to A)
A = A + [5,6] # first do [1,2,3,4] + [5,6] => [1,2,3,4,5,6], then assign this to A (which is creating and assigning new memory address to A).
可变对象是指可以更改的数据类型,例如列表、字典等,因为您始终可以 append 或向它们添加值。
相反,IMMUTABLE 对象是那些不能更改的对象,例如 python 中的 TUPLE。
希望它有所帮助。
你必须使用.append() function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.