您对复制地址的直觉是正确的。像这样思考:
sub_list = [0] * 10
a_list = [sub_list] * 10
该代码实际上与您上面发布的代码等效。这意味着您实际上sub_list
在更改的任何元素时都在更改同一列表a_list
。您甚至可以通过输入以下内容来确保:
a_list = [[0] * 10] * 10
for n in a_list:
print id(n)
并且每个元素都会显示相同的内容。为了解决这个问题,您应该使用:
a_list = [[0] * 10 for _ in range(10)]
为了为的每个元素创建一个新的子列表a_list
。