我有一个A类
class A:
__dict__ = {"x": 0}
def __init__(self, **kwargs):
self.__dict__.update(kwargs.copy())
当我创建A对象时。
>>> a = A(x=2)
>>> b = A(x=3)
>>> print(a.__dict__)
{x: 3}
>>> print(b.__dict__)
{x: 3}
当我预设 口述 橆 启动,它变成了可突变的,如何避免这种情况?
你可以用 dict.copy()
以获得新的(浅显的)副本。kwargs
,像这样。
class A:
def __init__(self, **kwargs):
self.local_copy = kwargs.copy()
print(id(self.local_copy))
a2 = A(x=2)
a3 = A(x=3)
print(a2.local_copy)
print(a3.local_copy)
例子输出:
15067008
15031824
{'x': 2}
{'x': 3}
EDIT: 正如 @chepner 在评论中指出的那样,在 copy
是没有必要的。我想你得到同样的原因是 id
对于这两种不同的调用,kwargs在函数返回后就不被引用了,所以对象可能会被垃圾回收,它的地址被重复使用。
即使没有复制,我也得到了同样的结果。(2个不同的ID, 和不同的A对象)