python - 这两种初始化数组的方式有什么区别?

标签 python list initialization

matrix = [[0]*1005]*1005

matrix = [[0 for _ in range(1005)] for _ in range(1005)]

我发现如果我使用前者作为初始数组,并运行 matrix[1][1] = 1 它将每行的第二列设置为 1。第二个执行为我希望。我不明白为什么?

最佳答案

[[0] * 1005] * 1005 将创建一个包含 1005 个引用 的数组,该数组包含 1005 个零。它们都是相同的引用,因此改变一个会改变所有其他的。不过,您可以将您的工作代码缩短为:

matrix = [[0] * 1005 for _ in range(1005)]

这几乎是任何人给你的关于列表乘法语法的唯一警告,实际上:)

关于python - 这两种初始化数组的方式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11336541/

相关文章:

python - 简单的 python 正则表达式不能按预期工作

python - 如何使用 Python 将文本文件读入列表或数组

ruby-on-rails-3 - 如何从 rails 控制台运行初始化程序?

java - 如何在 Java 7 中使用一组众所周知的值初始化无符号字节数组?

python - 如何针对每个特征图单独执行卷积

python - App Engine 上带有 Cursor 问题的任务链接。异常 : Too big query offset. 还有其他人遇到这个问题吗?

Python 不支持的操作数类型 >>

python - 满足条件时重置列表

python - 从列表 Python 中删除两个可能值之一

c++ - 使用 int 进行枚举类初始化