【发布时间】:2021-10-03 00:55:48
【问题描述】:
所以,我正在使用这个代码:
list_of_lists = []
sample_list = ['1', '2', '3']
for x in range(3):
list_of_lists.append(sample_list)
print(id(list_of_lists[0][1]),
id(list_of_lists[1][1]),
id(list_of_lists[2][1]))
实际上,子列表中的项目是相同的对象!
>140324175479088 140324175479088 140324175479088
如果我想将 list_of_lists[0][1] 更改为 '0',所有子列表都会相应更改。
为什么会这样?如何以正确的方式从 sample_list 生成 list_of_lists 以使每个子列表中的项目独立?
【问题讨论】:
-
因为你一遍又一遍地附加同一个对象。请改用
.append(sample_list.copy())。 -
哦...同样的结果。即使使用
.copy(),所有项目仍然具有相同的 id -
其实可以的!是的,ID 还是一样的,只是在我没有更改任何元素之前。谢谢!
-
@JohnGalt 这可能是因为 python 实习生字符串值达到一定长度
-
是的,在某些情况下您可能需要使用 deepcopy(从复制模块导入),但某些值(如小字符串和整数)将始终具有相同的 id。