python - 令人困惑的python:空列表作为类初始化中的可选kwarg
问题描述
我理解为什么在 python 中会发生以下情况,但这似乎有点违反直觉。任何人都可以解释为什么 python 应该这样吗?为什么在类 G 的第二次实例化时没有再次创建一个空列表?
class G:
def __init__(self, members=[]):
self.members = members
def append(self, x):
self.members.append(x)
a = G()
a.append(1)
a.append(2)
print(a.members) # prints: [1, 2]
b = G()
print(b.members) # prints: [1, 2] <-------- why????
编辑:如评论中所述,此问题已在此处解决。
解决方案
在定义期间评估默认值。所以只创建了一个列表,默认值总是指向它。
print(id(a.members))
print(id(b.members))
print(a.members is b.members)
输出:
140226208543200
140226208543200
True
推荐阅读
- python - 如何使用 Drive API 使用 GoogleSheet 模板将数据框设置为 GoogleSheet 工作表?
- java - 执行器线程仍显示在 CPU 中
- java - CORBA MARSHAL 1398079699/InvalidClassException 在 weblogic 12.2.1.3 升级后使用来自 swing 的枚举访问 ejb bean
- r - R:R中NPS计算的交叉表分析
- windows - 为什么 Visual Studio 构建后事件中的 xcopy 会减少一些文件大小?
- python - 创建一个单独的列的所有购买列表,除了 python pandas 数据框中的第一次出现
- javascript - 表达式插值 Javascript
- javascript - 如何使用普通的旧 javascript 获取底层 CSS 值
- c# - 如何禁用 MenuStrip MaximizeBox
- ssl - 让我们在 GKE 上使用 HApRoxy 进行加密