【发布时间】:2019-11-04 23:47:55
【问题描述】:
我想知道为什么在下面的 sn-p 中,复制对象 b 中的属性表现不同。 b.lst 产生 a.lst 的更新值,但 b.str 保留分配给 a.str 的原始值。这是为什么呢?
>>> import copy
>>> class A(object):
... pass
...
>>> a = A()
>>> a.lst = [1, 2, 3]
>>> a.str = "Hola"
>>> b = copy.copy(a)
>>> a.lst.append(4)
>>> a.str = "Adios"
>>> print b.lst
[1, 2, 3, 4]
>>> print b.str
Hola
【问题讨论】:
-
请不要将列表称为数组。核心 Python 中有几种数组类型:元组、列表、字节数组和 array.array,非常流行的 Numpy 库也有数组。使用正确的术语可以减少歧义,并使人们在未来进行搜索时更容易。
-
这里的根本区别不是
str和list之间的区别,而是=运算符(它重新绑定名称)和.append方法(它只是改变对象)。如果您执行了a.lst = [1, 2, 3, 4],那么b.lst将不受影响。
标签: python