例如,如果我有一个列表
t = [["a","b","c"],["d","e","f"],["g","h","i"]]
我复制了它并将元素[1] [1]更改为“z”,就像这样
t2 = t.copy()
t2[1][1] = "z"
当我打印两个表时,只应更改t2但原始表也会受到影响,为什么会这样?我不确定此问题是否已被提出,所以如果这是一个重复的问题,我很抱歉,但我一直无法理解这一点。感谢。
答案 0 :(得分:1)
copy
执行浅副本 - 即,您获得一个新的“外部”列表,该列表指向原始点所指向的相同“内部”列表。如果这不是所需的行为,则可以改为使用deepcopy
:
>>> from copy import deepcopy
>>> t = [["a","b","c"],["d","e","f"],["g","h","i"]]
>>> t2 = deepcopy(t)
>>> t2[1][1] = "z"
>>> t
[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
>>> t2
[['a', 'b', 'c'], ['d', 'z', 'f'], ['g', 'h', 'i']]
答案 1 :(得分:0)
在python中,copy()
执行浅表副本,请参阅https://docs.python.org/2/library/copy.html
浅拷贝构造一个新的复合对象然后(到 尽可能地将引用插入到找到的对象中 原来。
因此,在您的示例中,t2[1]=["j","j","j"]
不会影响t,但如果您想要进入下一级别,则需要进行深层复制
答案 2 :(得分:0)
你需要做一个深层复制。试试这个:
import copy
t = [["a","b","c"],["d","e","f"],["g","h","i"]]
t2 = copy.deepcopy(t)
t2[1][1] = "z"
现在应该有它的原始内容,而t2中的副本受到所请求更改的影响