您的位置:首页 > 编程语言 > Python开发

python的引用、浅拷贝与深拷贝

2016-11-23 17:28 190 查看
引用:

a=['a',['n','100']]

b=a

c=b

b[0]='b'(此时a[0]='b',c[0]='b')

浅拷贝:完全切片[:]、list、dict等

a=['a',['n','100']]

b=list(a)

c=list(b)

b[0]='b';c[0]='c';b[1][1]='30'(此时a[1][1]='30',c[1][1]='30')为什么b[0]!=a[0]!=c[0]因为它是字符串(不可变的,拷贝时创建一个新的对象),而b[1]是个列表(可变的,拷贝时将它的引用复制了一下,所以改变里面的元素b[1][0]、b[1][1]会改变共同引用a元素c的c[1][0]、c[1][1]、a[1][0]、a[1][1])

深拷贝:copy.deepcopy()

a=['a',['n','100']]

b=copy.deepcopy(a)

c=copy.deepcopy(a)

此时a,b,c互不影响

原来python处理数据时默认采用的方式是引用,类似于C++里面的int b;int &a=b(a只是b的一个别名)

对于数字、字符串、元组等原子类型就不存在什么浅拷贝、深拷贝了(因为它是新建了一个对象,其id会改变的)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: