首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python列表追加行为

Python列表追加行为
EN

Stack Overflow用户
提问于 2011-08-31 18:00:41
回答 4查看 4.8K关注 0票数 24

我真的不知道如何表达这个问题。

假设我执行以下操作:

代码语言:javascript
复制
    >>> l = [[]]*2
    >>> l
    [[], []]
    >>> l[0].append(1)
    >>> l
    [[1], [1]]

为什么1会同时附加到两个列表?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-31 18:01:30

[[]]*2是对相同列表的两个引用的列表。您正在附加它,然后看到它两次。

票数 20
EN

Stack Overflow用户

发布于 2011-08-31 18:02:28

因为实际上只有一个列表。请考虑以下内容:

代码语言:javascript
复制
>>> l = [[]]
>>> l2 = l*2
>>> l2[0] is l[0]
True
>>> l2[1] is l[0]
True

在列表上执行的*2不会复制列表,但会返回一个长度为2的列表,其中填充了相同的引用。

你可能想要的是:

代码语言:javascript
复制
>>> l = [[] for _ in xrange(2)]

正如@Asterisk在评论中提到的那样,所有常见的集合都会公开相同的行为。因此,根据经验,最好只在具有值语义的不可变类型上使用乘法。

票数 14
EN

Stack Overflow用户

发布于 2017-04-07 06:11:36

展示内存布局差异的

代码语言:javascript
复制
listOfLists = [[]] * 3
listOfListsRange = [[] for i in range(0, 3)]

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7255383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档