首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解Python中的setdefault

了解Python中的setdefault
EN

Stack Overflow用户
提问于 2015-08-24 00:33:21
回答 4查看 354关注 0票数 1

我很难理解我的代码中发生了什么。所以如果我有下面这行代码:

代码语言:javascript
复制
d = {}
d.setdefault("key",[]).append("item")

这将返回

代码语言:javascript
复制
{'key': ['item']}

所以我知道setdefault做了什么。它在字典的d中检查"key",如果它不存在,它就创建它,否则如果它存在,它就返回值。这将返回一个可以操作的副本,并将在原始字典中进行更新。这对我来说是一个新的想法。这是否意味着setdefault返回一个深层拷贝,而不是一个浅拷贝?试图让我的大脑理解这个浅拷贝和深拷贝。

EN

回答 4

Stack Overflow用户

发布于 2015-08-24 00:36:08

它等同于

代码语言:javascript
复制
item = d.get(key,default)
d[key] = item
d[key].action #in this case append
票数 2
EN

Stack Overflow用户

发布于 2015-08-24 00:39:19

没有Python操作执行隐式复制。永远不会。就Python而言,隐式复制是邪恶的。

它是创建对象的文字。每次调用setdefault时,它都会计算两个参数。当它计算第二个参数([])时,将创建一个新列表。它与a = []完全相同。

如果您编写el = [],然后多次尝试在某个字典中使用.setdefaulting el,您将看到没有创建任何副本。

票数 2
EN

Stack Overflow用户

发布于 2015-08-24 00:35:57

来自神圣的docs

设置默认值(键,默认值)

如果key在字典中,则返回它的值。如果不是,则插入值为default的key并返回default。缺省值为None。

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

https://stackoverflow.com/questions/32168922

复制
相关文章

相似问题

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