如果類中有列表,實例化類的時候,不同實例中列表是指向相同的列表空間,例如:
# -*- coding: utf-8 -*-
import copy
class test():
name = {
'key1':['a', 'b', 'c'],
'key2':['1', '2', '3']
}
if __name__ == '__main__':
z1 = test()
z2 = test()
z1.name['key1'][1] = 'zcc'
z2.name['key1'][1] = 'zzh'
print z1.name
print z2.name
運行結果:
{'key2': ['1', '2', '3'], 'key1': ['a', 'zzh', 'c']}
{'key2': ['1', '2', '3'], 'key1': ['a', 'zzh', 'c']}
想要的結果是:z1.name['key1'][1] = 'zcc' z2.name['key1'][1] = 'zzh'
實際的結果是:全部都設置成了zzh,此時需要對類中的列表做深拷貝。
====================================================
# -*- coding: utf-8 -*-
import copy
class test():
name = {
'key1':['a', 'b', 'c'],
'key2':['1', '2', '3']
}
if __name__ == '__main__':
z1 = test()
z2 = test()
z1.name = copy.deepcopy(test.name)
z2.name = copy.deepcopy(test.name)
z1.name['key1'][1] = 'zcc'
z2.name['key1'][1] = 'zzh'
print z1.name
print z2.name
運行的結果:
{'key2': ['1', '2', '3'], 'key1': ['a', 'zcc', 'c']}
{'key2': ['1', '2', '3'], 'key1': ['a', 'zzh', 'c']}