# 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 2015-08-30 20:11:57 +08:00
因为 hardware 是一个引用,他指向了一个字典。
你在修改的过程中并没有修改引用本身,而是修改了指向的字典的值。 你如果把 l1.hardware['cpu'] = 'amd' 改为 l1.hardware = {'cpu':'amd','disk':'500G'} 就不会出现这种状况。 |
2
leavic 2015-08-30 20:22:55 +08:00
所以 python 会建议你把类成员数值的初始化放到_init_函数里去,这样可以避免这个问题。
|
3
ljcarsenal 2015-08-30 20:39:33 +08:00
可变类型和不可变类型的区别,以及类变量和实例变量的区别
|
4
wingor2015 2015-09-04 16:32:31 +08:00
@ljcarsenal 嗯, c 系列语言过来的人容易被坑
|