類中關於列表的應用

如果類中有列表,實例化類的時候,不同實例中列表是指向相同的列表空間,例如:

# -*- 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']}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章