Python嵌套列表(二维数组)引用

标签 python arrays list nested 2d

看看我的代码...为什么我的第一个嵌套列表 (grid1) 与第二个嵌套列表 (grid2) 不一样?为什么应用程度不同? 对于游戏,我想要一个 4 x 6 的网格,其中每个元素的值都为“x”,除了 grid[0][0] 之外,都被分配给“O”。这在grid2中有效,但在grid1中无效。为什么引用和列表看起来相同但不同?

#setup grid1 (4x6 2D nested list) populating x's in all positions
grid1 =[["x"]*4]*6]

grid1[0][0]="O"      #assign row 1, column 1 'O'
print(grid1)         

输出

[['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x'], ['O', 'x', 'x', 'x']]

但是这个实现...

grid2 = []  
for row in range(0,6):
    grid2.append([])
    for column in range(0,4):
        grid2[row].append("x")

grid2[0][0]="O"

print(grid2)

输出正确

[['O', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x']]

有什么区别以及为什么不同?

最佳答案

对于 [["x"]*4]*6 行中的 grid1,'*6' 操作创建一个包含六个 ["x","x","x","x"的列表] 但是相同的引用。 这意味着更改六个 ["x","x","x","x"] 中的任何一个都会更改其他对象,因为它们引用内存中的同一对象。

您构建自己的列表类,该类重写 mul() 以在列表乘法过程中深度复制列表。

关于Python嵌套列表(二维数组)引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60090746/

相关文章:

python - 如何与 python 建立 ssh 连接?

python - 向 Tastypie API 发出 POST 请求时出错

python - 使用 Praw 抓取 subreddit 帖子标题并将其用作文件名

c# - 来自字节数组的字符串不会在 C# 中被修剪?

python - 将嵌套列表转换为 pd Dataframe 的快速且 Pythonic 的方法

c# - 将属性添加到列表?

python - 尝试使用子进程将特定文件从 S3 存储桶下载到 EC2 时参数类型无效

python - 将字符串与字符序列进行比较

c# - 仅基于子字符串过滤列表<字符串>

arrays - 如何按段落或 block 将文件读入数组