非常简单的python,我只是通过复制旧列表来创建一个新的列表对象。通过使用.copy()方法,我认为它应该基于官方文档在Python中创建一个新对象:https://docs.python.org/3.6/library/stdtypes.html?highlight=list#list
为什么在更新新对象中的元素之后,旧列表对象中的元素也发生了变化。
old = [[1, 1, 1],
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]]
print(old)
new = old.copy()
for i in range(len(new)):
for j in range(len(new[0])):
new[i][j] = 0
print(old)
print(new)
如何输出,我期望旧值不应该改变:
[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
答案 0 :(得分:5)
复制仅适用于一维列表。要获得更好的解决方案,无论使用哪个维度,都可以使用deepcopy
:
from copy import deepcopy
old = [[1, 1, 1],
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]]
print(old)
new = deepcopy(old)
for i in range(len(new)):
for j in range(len(new[0])):
new[i][j] = 0
print(old)
print(new)
你将拥有:
[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
希望它有所帮助!
答案 1 :(得分:0)
尝试[copy.deepcopy][1]
或
from copy import deepcopy
new = deepcopy(old)
来自的
浅复制构造一个新的复合对象,然后(尽可能)将对它的引用插入到原始对象中找到的对象。深拷贝构造一个新的复合对象,然后递归地将副本插入到原始对象中找到的对象。