【发布时间】:2019-01-12 19:17:13
【问题描述】:
python 中的切片应该是浅拷贝。但是,当我运行以下命令时:
cur = [[0] * (2) for _ in xrange(2)]
cur2 = [row[:] for row in cur]
cur2[0][0] = "foo"
print(cur)
print(cur2)
我明白了:
[[0, 0], [0, 0]] # cur
[['foo', 0], [0, 0]] # cur2
这使它看起来像是一个深拷贝。
我有两个问题: 1)这里发生了什么?这是深拷贝还是浅拷贝? 2) 这种语法如何使它比copy.deepcopy 快得多?比如,是不是和python管理内存的方式有关?
【问题讨论】:
-
你认为这些切片复制了 什么?
-
我不确定:每行的深层副本?
-
为什么你认为它是每一行的deep副本?您会从每行的浅拷贝中看到不同的结果吗?
-
cur的浅拷贝将是cur2 = cur[:]。您通过进入cur并复制每一行来执行深层复制。 -
@user2357112 是的 - 如果是浅拷贝,“foo”将在 cur 中。修改 cur2 也会修改 cur。
标签: python copy deep-copy shallow-copy