微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更新 Python 类字段

如何解决更新 Python 类字段

这是一个基本问题,可以阐明类字段的更新方式。我遇到了以下情况:

class MyClass():
    def __init__(self):
        self.a=0
        self.my_dict={'a':self.a}

c=MyClass()
print('c.a=',c.a)
print('c.my_dict[\'a\']=',c.my_dict['a'])
c.my_dict['a']=1
print('c.a=',c.my_dict['a'])

结果:

c.a= 0
c.my_dict['a']= 0
c.a= 0
c.my_dict['a']= 1

c.a 具有相同的值。为什么? c.a 不应该在内存中引用与 c.my_dict['a'] 相同的位置吗?

解决方法

如果在你的代码之后,你看看你的类中的变量,希望它澄清了一些事情:

>>> vars(c)
{'a': 0,'my_dict': {'a': 1}}

当您分配 self.my_dict = {'a': self.a} 时,您读取 a 的当前值,然后生成一个 dict {'a': that_value}。没有对变量 a 的引用。

如果您想存储这样的引用,您可以执行以下操作:

class MyClass():
    def __init__(self):
        self.a = [0]
        self.my_dict = {'a': self.a}

c = MyClass()
>>> vars(c)
{'a': [0],'my_dict': {'a': [0]}}

c.my_dict['a'][0] = 1
>>> vars(c)
{'a': [1],'my_dict': {'a': [1]}}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。