码迷,mamicode.com
首页 > 编程语言 > 详细

python天坑------可变对象

时间:2018-10-25 19:43:59      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:独立   不可变对象   也会   bsp   set   字体   问题   一个   int   

我们知道,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天坑------可变对象

标签:独立   不可变对象   也会   bsp   set   字体   问题   一个   int   

原文地址:https://www.cnblogs.com/jiage666/p/9851745.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!