用零创建列表时的异常行为

时间:2018-09-30 05:18:45

标签: python

在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 ...值?

1 个答案:

答案 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]]}

在上面的代码中,您可能会感到与众不同。您的问题的答案是内存地址是原因。

编辑:

不仅适用于零,还适用于任何值