0

可能重复:
Python 列表混淆

当我编写一个简单的 python 脚本时,我定义了一个新列表,如下所示:

A=[[],]*10

我想做的只是初始化一个长度为 10 的列表,每个元素都是一个空列表。

当我做类似的事情时:

A[0].append(["abc",])

我只想将它附加["abc",]A[0],结果是 A 中的每个元素都附加了["abc",]

我知道这可能是由于我的初始化 ( A=[[],]*10)。我只是想知道为什么会这样。

4

3 回答 3

3

你的表达A=[[]]*10相当于:

a = []
A = [a]*10

这意味着 A 包含对同一个列表的 10 个引用。

于 2012-09-22T21:09:00.080 回答
2

您正在创建一个包含 10 个对同一空列表的引用的列表。

您应该改用列表推导:

A = [[] for _ in range(10)]

在列表推导中,您为循环中的每次迭代创建一个新列表。如果你使用的是 python 2,你应该使用xrange而不是range(尽管只有 10 个元素不会有太大的区别)。

于 2012-09-22T21:11:43.553 回答
1

所有空列表都是对同一对象的引用。

于 2012-09-22T21:10:01.257 回答