在python行为中列出

时间:2014-04-22 00:24:30

标签: list python-2.7

我的列表my_list创建为mylist = [[]]*5

现在我想在my_list

的第三个列表中添加一个整数4

my_list[2].append(4)

当我打印my_list时,我看到my_list中的每个列表都添加了整数4。

>>> my_list = [[]]*5

>>> my_list[2].append(4)

>>> my_list

[[4], [4], [4], [4], [4]]

有没有办法将4添加到第3个列表?

预期:[[],[],[4],[],[]]

实际:[[4],[4],[4],[4],[4]]

3 个答案:

答案 0 :(得分:1)

找到了答案。

my_list = [[] for i in xrange(5)]

应该做的伎俩

答案 1 :(得分:1)

我对正在发生的事情的理解是,当你运行[[]]时,它只会创建对一个初始化列表的多个引用。我相信 [[] for i in range(5)] 正是您所寻找的;它初始化父列表中的不同列表。希望这有帮助!

答案 2 :(得分:1)

TL,DR:

mylist = [list() for i in xrange(5)]

当python遇到mylist = [[]]*5时,它会在你的内存中创建一个实体列表,并将这个只有一个列表的5个引用附加到mylist。

它等于:

single_list = []
mylist = [single_list, single_list, single_list, single_list, single_list]

因此,如果您将4附加到第三个列表,4现在位于single_list中,并且因为所有5个引用都是相同的single_list,所以它看起来像所有5个列表包含4