且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

类中关于列表的应用

更新时间:2022-09-07 17:00:32

如果类中有列表,实例化类的时候,不同实例中列表是指向相同的列表空间,例如:

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




本文转自 freeterman 51CTO博客,原文链接:http://blog.51cto.com/myunix/1916442,如需转载请自行联系原作者