【发布时间】:2021-10-26 12:21:44
【问题描述】:
参考以下代码
a1 = [['H', 'T'], ['T', 'T']]
print("a1 =",a1)
print("Making b1 copy of a1")
b1 = a1[:]
print("b1 = ",b1)
print("Changing one element of b1")
b1[1][1] = 'H'
print("b1 = ",b1)
print("a1 = ",a1)
这给出了输出
a1 = [['H', 'T'], ['T', 'T']]
Making b1 copy of a1
b1 = [['H', 'T'], ['T', 'T']]
Changing one element of b1
b1 = [['H', 'T'], ['T', 'H']]
a1 = [['H', 'T'], ['T', 'H']]
当我通过切片创建 a1 的副本时,为什么要更改 b1 更改 a1?
【问题讨论】:
-
因为切片是一个浅拷贝。
-
你需要做一个深拷贝,试试这个,
import copy然后代替b1 = a1[:],做这个,b1 = copy.deepcopy(a1)。还有其他方法可以实现这一点。这是因为列表在 python 中的存储方式,当您创建副本时,只会创建指向前一个列表的指针。您正在修改指针指向的同一对象。您需要创建一个适当的副本。