我很难理解我的代码中发生了什么。所以如果我有下面这行代码:
d = {}
d.setdefault("key",[]).append("item")这将返回
{'key': ['item']}所以我知道setdefault做了什么。它在字典的d中检查"key",如果它不存在,它就创建它,否则如果它存在,它就返回值。这将返回一个可以操作的副本,并将在原始字典中进行更新。这对我来说是一个新的想法。这是否意味着setdefault返回一个深层拷贝,而不是一个浅拷贝?试图让我的大脑理解这个浅拷贝和深拷贝。
发布于 2015-08-24 00:36:08
它等同于
item = d.get(key,default)
d[key] = item
d[key].action #in this case append发布于 2015-08-24 00:39:19
没有Python操作执行隐式复制。永远不会。就Python而言,隐式复制是邪恶的。
它是创建对象的文字。每次调用setdefault时,它都会计算两个参数。当它计算第二个参数([])时,将创建一个新列表。它与a = []完全相同。
如果您编写el = [],然后多次尝试在某个字典中使用.setdefaulting el,您将看到没有创建任何副本。
发布于 2015-08-24 00:35:57
https://stackoverflow.com/questions/32168922
复制相似问题