python浅拷贝与深拷贝
来源:互联网 发布:淘宝改折扣影响权重吗 编辑:程序博客网 时间:2024/05/17 23:57
一、浅拷贝
浅拷贝是对于一个对象的顶层拷贝,通俗的理解是拷贝了引用,并没有拷贝内容,新变量与被拷贝变量指向同一个对象
1.=
例如:
a=[1,2]
a=b
这就是浅拷贝,即拷贝了引用
=============
二、深拷贝
深拷贝是拷贝了内容,而不是拷贝了引用
2.copy.deepcopy()
需要先 import copy模块
例如:
impor copy
a=[1,2]
c=copy.deepcopy(a)
例如:
a=[1,2]
b=[3,4]
c=[a,b]
d=copy.deepcopy(c)
a.append(5)
此时输出的c[0]的结果是[1,2,5]
此时输出的d[0]的结果是[1,2]
在deepcopy的时候,即便c换成元组,c和d的地址也不一样
所以这种方式的拷贝会深层的拷贝内容,把所有的内容都拷贝下来,而不是仅拷贝一层
3.仅拷贝一层 copy.copy()
例如:
a=[1,2]
b=[3,4]
c=[a,b]
d=copy.copy(c)
a.append(5)
此时输出c[0]的结果是[1,2,5]
此时输出d[0]的结果是[1,2,5]
所以这种拷贝仅拷贝一层内容
对于元组时的一些特点,例如:
a=[1,2]
b=[3,4]
c=(a,b) #注意此处为元组
d=copy.copy(c)
id(c)
id(d)
此时c和d的地址是一样的
因为对于元组这个不可变类型,仅拷贝一层没有意义
所以copy.copy的时候会判断被拷贝对象是否是可变类型,如果是不可变类型,仅相当于拷贝了引用(浅拷贝)
浅拷贝是对于一个对象的顶层拷贝,通俗的理解是拷贝了引用,并没有拷贝内容,新变量与被拷贝变量指向同一个对象
1.=
例如:
a=[1,2]
a=b
这就是浅拷贝,即拷贝了引用
=============
二、深拷贝
深拷贝是拷贝了内容,而不是拷贝了引用
2.copy.deepcopy()
需要先 import copy模块
例如:
impor copy
a=[1,2]
c=copy.deepcopy(a)
例如:
a=[1,2]
b=[3,4]
c=[a,b]
d=copy.deepcopy(c)
a.append(5)
此时输出的c[0]的结果是[1,2,5]
此时输出的d[0]的结果是[1,2]
在deepcopy的时候,即便c换成元组,c和d的地址也不一样
所以这种方式的拷贝会深层的拷贝内容,把所有的内容都拷贝下来,而不是仅拷贝一层
3.仅拷贝一层 copy.copy()
例如:
a=[1,2]
b=[3,4]
c=[a,b]
d=copy.copy(c)
a.append(5)
此时输出c[0]的结果是[1,2,5]
此时输出d[0]的结果是[1,2,5]
所以这种拷贝仅拷贝一层内容
对于元组时的一些特点,例如:
a=[1,2]
b=[3,4]
c=(a,b) #注意此处为元组
d=copy.copy(c)
id(c)
id(d)
此时c和d的地址是一样的
因为对于元组这个不可变类型,仅拷贝一层没有意义
所以copy.copy的时候会判断被拷贝对象是否是可变类型,如果是不可变类型,仅相当于拷贝了引用(浅拷贝)
阅读全文
0 0
- Python的浅拷贝与深拷贝
- python/c++ 深拷贝与浅拷贝
- Python 深拷贝与浅拷贝
- Python中的浅拷贝与深拷贝
- python 浅拷贝与深拷贝
- Python的深拷贝与浅拷贝
- Python中深拷贝与浅拷贝
- python append()与深拷贝、浅拷贝
- python浅拷贝与深拷贝
- Python 的深拷贝与浅拷贝
- python中的深拷贝与浅拷贝
- Python:深拷贝与浅拷贝
- python 赋值、浅拷贝与深拷贝
- [Python]浅拷贝与深拷贝
- Python浅拷贝与深拷贝
- Python中的浅拷贝与深拷贝
- Python的深拷贝与浅拷贝
- python-深拷贝与浅拷贝
- C++中的字符串
- Android内存溢出与优化(五)——防止static引用
- 【二分匹配入门专题1】G
- js学习笔记:柯里化
- mysql(5.6)分区(三)与功能有关的分区限制
- python浅拷贝与深拷贝
- 设计模式学习(一)、策略模式
- APUE第三章学习笔记
- linux学习之路1 Linux系统安装
- 多线程之策略模式
- Ajax和数据库实现三级联动
- STM8L使用ADC内部参考电压通道测量VDD电压
- 编写优质嵌入式C程序
- 开源协议的区别