在Python解释器3.6-中考虑以下两段代码
>>> d = {0:[[1,2],[3,4]] , 1 : [[0,0],[0,0]]}
>>> d
{0: [[1, 2], [3, 4]], 1: [[0, 0], [0, 0]]}
>>> d[1][0][0] = 5
>>> d
{0: [[1, 2], [3, 4]], 1: [[5, 0], [0, 0]]}
和
d[1]
为什么唯一的区别在于创建零列表的方式,它们为什么给出不同的Control Panel > System > Advanced System Settings > Advanced > Settings > Advanced > Virtual memory, Change ...
值?
答案 0 :(得分:0)
>>> d = {0:[[1,2],[3,4]]}
>>> d[1] = [[0]*2]*2 #You are using the same address of the list to create the second list
>>> d
{0: [[1, 2], [3, 4]], 1: [[0, 0], [0, 0]]}
>>> d[1][0][0] = 5
>>> d
{0: [[1, 2], [3, 4]], 1: [[5, 0], [5, 0]]}
因此,如果您更改一个内存地址的值,则另一个更改。
>>> d = {0:[[1,2],[3,4]]}
>>> d[1] = [[0]*2,[0]*2] #Now we are creating two list of different address
>>> d
{0: [[1, 2], [3, 4]], 1: [[0, 0], [0, 0]]}
>>> d[1][0][0] = 5
>>> d
{0: [[1, 2], [3, 4]], 1: [[5, 0], [0, 0]]}
在上面的代码中,您可能会感到与众不同。您的问题的答案是内存地址是原因。
编辑:
不仅适用于零,还适用于任何值