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会改变的)
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会改变的)
相关文章推荐
- Python中的引用和拷贝浅析
- python变量的拷贝与引用
- python 引用和拷贝、重复
- Python语言中的引用和拷贝
- Python引用、浅拷贝、深拷贝 和 Numpy中的视图、副本 和 Python函数参数传递
- python变量、引用、拷贝之间的关系
- python3的对象引用、浅拷贝与深拷贝
- 【Python】对象拷贝、对象传参、对象引用
- Python中的对象引用、浅拷贝与深拷贝
- python赋值和拷贝----一切皆对象,参数皆引用
- Python中的引用和拷贝浅析
- python 引用和拷贝
- python 赋值生成引用,而不是拷贝
- python中的对象拷贝示例 python引用传递
- python中的对象拷贝示例 python引用传递
- python 引用与拷贝
- python中的引用与拷贝
- 04 Python正则表达式 爬虫程序 变量的引用,浅拷贝,深拷贝 多线程 进程锁 数据库模块
- python基础(5):深入理解 python 中的赋值、引用、拷贝、作用域
- python基础(5):深入理解 python 中的赋值、引用、拷贝、作用域