更新 Python Class 个字段
Updating Python Class fields
这是一个基本问题,可以阐明 class 字段的更新方式。我遇到过以下情况:
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.a)
print('c.my_dict[\'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'] 相同的位置吗?
如果在您的代码之后,您查看 class 中的变量,希望它能澄清问题:
>>> vars(c)
{'a': 0, 'my_dict': {'a': 1}}
赋值self.my_dict = {'a': self.a}
时,读取a
的当前值,然后生成字典{'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]}}
这是一个基本问题,可以阐明 class 字段的更新方式。我遇到过以下情况:
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.a)
print('c.my_dict[\'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'] 相同的位置吗?
如果在您的代码之后,您查看 class 中的变量,希望它能澄清问题:
>>> vars(c)
{'a': 0, 'my_dict': {'a': 1}}
赋值self.my_dict = {'a': self.a}
时,读取a
的当前值,然后生成字典{'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]}}