Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我有一个二维列表,其中我更改了一个子项,但这种更改也发生在每个兄弟姐妹身上_Python_List - Fatal编程技术网

Python 我有一个二维列表,其中我更改了一个子项,但这种更改也发生在每个兄弟姐妹身上

Python 我有一个二维列表,其中我更改了一个子项,但这种更改也发生在每个兄弟姐妹身上,python,list,Python,List,我正试图在Python3.8中创建一个阿贝尔沙堆模型(请参见:),但我没有查看提供的解决方案,因为这是一个实践练习。我正在着手寻找一个可能的解决方案,但我不确定为什么会出现以下问题 我有一个5x5网格,由列表组成 #由5个子列表组成的列表,每个子列表包含5个0 面积=[[0]*5]*5 我的第一步是放置沙堆(即将一个(x,y)对更改为一个更高的数字),我编写了此函数来实现这一点: #将一个位置更改为更高的高度,采用基于一的(x,y)对 def make_沙堆(面积、位置、高度): #适用于零基

我正试图在Python3.8中创建一个阿贝尔沙堆模型(请参见:),但我没有查看提供的解决方案,因为这是一个实践练习。我正在着手寻找一个可能的解决方案,但我不确定为什么会出现以下问题

我有一个5x5网格,由列表组成

#由5个子列表组成的列表,每个子列表包含5个0
面积=[[0]*5]*5
我的第一步是放置沙堆(即将一个(x,y)对更改为一个更高的数字),我编写了此函数来实现这一点:

#将一个位置更改为更高的高度,采用基于一的(x,y)对
def make_沙堆(面积、位置、高度):
#适用于零基计数
loc=列表(n-1表示loc中的n)
#翻译成x和y
x、 y=loc
#更改区域中的对应点
面积[y][x]=高度
调用
制作沙堆(区域,(3,3,4)
应具有以下结果:

0 0 0 0 0          0 0 0 0 0
0 0 0 0 0          0 0 0 0 0
0 0 0 0 0    ->    0 0 4 0 0
0 0 0 0 0          0 0 0 0 0
0 0 0 0 0          0 0 0 0 0
然而,结果如下:

0 0 0 0 0          0 0 4 0 0
0 0 0 0 0          0 0 4 0 0
0 0 0 0 0    ->    0 0 4 0 0
0 0 0 0 0          0 0 4 0 0
0 0 0 0 0          0 0 4 0 0

如何更正此问题?

您应该使用类似于
[[0]*5]*5的内容,而不是
[[0]*5,用于范围(5)]
。否则,您只是将引用复制到同一个列表。

问题是
[[0]*5]*5
创建了一个列表,其中包含对同一内部列表的5个引用,即由
[0]*5
创建的列表(该列表本身是一个对同一
int
对象的5个引用的列表…,但这并不重要)