code1
class Foo(object):
x = 1.5
foo = Foo()
print Foo.x # 值为 1.5 类属性
print foo.x # 值为 1.5 ,实例属性(在实例属性没有的情况下,使用类属性)
foo.x = 1.7
print foo.x # 实例属性
print Foo.x # 实例属性的修改不会影响类属性(实例属性可以有效屏蔽类属性)
code2
#!/usr/bin/env python
# coding=utf-8
class Foo(object):
x = {1: 'hello'}
foo = Foo()
print foo.x # 值为{1: 'hello'}
print Foo.x # 值为{1: 'hello'}
foo.x[1] = 'world'
print foo.x # 值为{1: 'world'}
print Foo.x # 值为{1: 'world'}
问题: 为什么第一个代码段当类属性是不可变对象时(数字),修改实例属性,不会影响到类属性 而第二个代码段中,当类属性是可变对象时(字典),修改实例属性,导致类属性也改变了?