我想知道为什么在以下代码段中,复制的对象unmodifiable
中的属性的行为不同。 b
产生b.lst
的更新值,但是a.lst
保留分配给b.str
的原始值。为什么会这样?
a.str
答案 0 :(得分:3)
根据[Python 3.Docs]: copy.copy(x)(强调是我的):
返回 x 的浅拷贝。
要真正复制列表(或任何可变对象),请改用copy.deepcopy
。
>>> import copy >>> >>> class A(object): pass # In Python 3, object is extended by default ... >>> >>> a = A() >>> a.lst = [1, 2, 3] >>> a.str = "Hola" >>> >>> b = copy.copy(a) >>> >>> c = copy.deepcopy(a) >>> >>> a.lst.append(4) >>> a.str = "Adios" >>> >>> print(b.str, b.lst) Hola [1, 2, 3, 4] >>> >>> print(c.str, c.lst) Hola [1, 2, 3]