可能重复:
Python 列表混淆
当我编写一个简单的 python 脚本时,我定义了一个新列表,如下所示:
A=[[],]*10
我想做的只是初始化一个长度为 10 的列表,每个元素都是一个空列表。
当我做类似的事情时:
A[0].append(["abc",])
我只想将它附加["abc",]
到A[0]
,结果是 A 中的每个元素都附加了["abc",]
我知道这可能是由于我的初始化 ( A=[[],]*10
)。我只是想知道为什么会这样。
可能重复:
Python 列表混淆
当我编写一个简单的 python 脚本时,我定义了一个新列表,如下所示:
A=[[],]*10
我想做的只是初始化一个长度为 10 的列表,每个元素都是一个空列表。
当我做类似的事情时:
A[0].append(["abc",])
我只想将它附加["abc",]
到A[0]
,结果是 A 中的每个元素都附加了["abc",]
我知道这可能是由于我的初始化 ( A=[[],]*10
)。我只是想知道为什么会这样。
你的表达A=[[]]*10
相当于:
a = []
A = [a]*10
这意味着 A 包含对同一个列表的 10 个引用。
您正在创建一个包含 10 个对同一空列表的引用的列表。
您应该改用列表推导:
A = [[] for _ in range(10)]
在列表推导中,您为循环中的每次迭代创建一个新列表。如果你使用的是 python 2,你应该使用xrange
而不是range
(尽管只有 10 个元素不会有太大的区别)。
所有空列表都是对同一对象的引用。