python天坑------可变对象
Posted jiage666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python天坑------可变对象相关的知识,希望对你有一定的参考价值。
我们知道,python中对象是分为可变和不可变的,
不可变对象比如字符串、数字、元组。对不可变对象的修改,python会在内存中开辟新的空间,来存储这个新的对象,
也就是,修改后的对象和原对象在内存中是互相独立的两块空间,
可变对象比如,list、dict、set。可变对象本质是一个容器,对可变对象的修改,也就是修改容器中的元素,
python不会开辟新的空间,也就是,内存中始终只存在一个容器
问题主要出在可变对象上,下面以list为例说明
a=[] if len(a): b=a.pop() else: b=[] b.append(8) #b=[8] a.append(b) #a=[[8]],或者a=[b] a.append(b) #a=[[8],[8]],或者a=[b,b] print(‘a:‘,a) print(‘b:‘,b) if len(a): b=a.pop() #b=[8] #a=[[8]],或者a=[b] else: b=[] b.append(8) #b=[8,8] #a=[b],所以a=[[8,8]] a.append(b) #a=[b,b],所以a=[[8,8],[8,8]] print(‘a:‘,a) print(‘b:‘,b) 输出: a: [[8], [8]] b: [8] a: [[8, 8], [8, 8]] b: [8, 8]
由于a中的元素是b,
而b是个容器,里面的元素是可变的,
当b中的元素变化的时候,a也会跟着变,如上述字体加粗部分
总结:
如果需要保存可变对象,并且该可变对象一直在变化时,需要保存其深拷贝对象,切记!
以上是关于python天坑------可变对象的主要内容,如果未能解决你的问题,请参考以下文章