# coding=utf-8
class Linux (object ):
name = 'linux'
hardware = {'cpu': 'intel', 'disk': '500G'}
l1 = Linux ()
l1.name = 'CentOS'
l1.hardware['cpu'] = 'amd'
l2 = Linux ()
print l2.name, l2.hardware
输出结果
linux {'disk': '500G', 'cpu': 'amd'}
name 和 hardware 都属于静态变量,为什么修改了 name 不影响另一个实例,而修改了 hardware 就会呢?
1
KIDJourney Aug 30, 2015
因为 hardware 是一个引用,他指向了一个字典。
你在修改的过程中并没有修改引用本身,而是修改了指向的字典的值。 你如果把 l1.hardware['cpu'] = 'amd' 改为 l1.hardware = {'cpu':'amd','disk':'500G'} 就不会出现这种状况。 |
2
leavic Aug 30, 2015
所以 python 会建议你把类成员数值的初始化放到_init_函数里去,这样可以避免这个问题。
|
3
ljcarsenal Aug 30, 2015
可变类型和不可变类型的区别,以及类变量和实例变量的区别
|
4
wingor2015 Sep 4, 2015
@ljcarsenal 嗯, c 系列语言过来的人容易被坑
|