首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 3列表行为

Python 3列表行为
EN

Stack Overflow用户
提问于 2022-10-09 23:02:47
回答 1查看 28关注 0票数 -3

我在练习蟒蛇,发现下面的行为,但我不明白为什么。谁能解释一下原因吗?

案例1

代码语言:javascript
复制
a = [[] for i in range(5)]
b = [[]] * 5
a[3].append(3)
b[3].append(3)
print(a) # Output: [[], [], [], [3], []]
print(b) # Output: [[3], [3], [3], [3], [3]]

我在a和b上看到了不同的行为,a和b之间有什么区别?

案例2

代码语言:javascript
复制
def test(sentences):
    root = {}
    for sentence in sentences:
        base = root
        for word in sentence.split(' '):
            if not base.get(word):
                base[word] = {}
            base = base[word]
    return root

print(test(["Hello world", "Hello there"]))
# Output: {'Hello': {'world': {}, 'there': {}}}

也许是个问题,但是在第二种情况下,当你没有修改根的时候,它是如何被修改的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-09 23:07:47

列表上的*操作将创建一个列表的副本。这是证据,

代码语言:javascript
复制
In [1]: a = [[] for i in range(5)]
   ...: b = [[]] * 5

In [2]: [id(i) for i in a]
Out[2]: [4649788160, 4640976128, 4647308224, 4647305856, 4643089472]

In [3]: [id(i) for i in b]
Out[3]: [4648966336, 4648966336, 4648966336, 4648966336, 4648966336]

对于case2也是如此。

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

https://stackoverflow.com/questions/74008961

复制
相关文章

相似问题

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