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