python初识之深浅拷贝
来源:互联网 发布:sql强数据库破解路由器 编辑:程序博客网 时间:2024/06/08 05:00
浅拷贝
使用对象.copy()实现浅拷贝,该对象可以为任意类型,该对象中的元素也可为任意类型,浅拷贝只拷贝第一层
如:
a = ['a', 1, 'b', 2]b = a.copy() #对列表a进行浅拷贝b[0]='abc' #修改拷贝后的b中第一层元素a为abcprint(a) #输出打印['a', 1, 'b', 2]print(b) #['abc', 1, 'b', 2]''' 从输出打印来看,修改对象b中第一层的字符串a为abc,只有b对象只发生改变 而a对象丝毫不受影响,说明浅拷贝修改第一层数据不会对a产生影响 '''
在内存中的实现方式参考下图:
说明在拷贝之后,b对象的所有元素指向了a中的所有元素的指针,当改变b[0]元素的值为abc后,内存会开辟一块新的内存存放abc,此时,b[0]就指向了abc这一元素的指针,但是a[0]的指针此时并没有任何变化,所以只是对象b的元素发生了改变。
若a中存在嵌套列表或字典,浅拷贝后,对嵌套列表或字典修改后如下:
a = [['a', 'abc'], 1, 'b', 2] #a中存在嵌套列表b = a.copy() #对其进行浅拷贝b[0][1] = 123 #对拷贝后的嵌套列表进行操作 #对拷贝后的对象b修改其嵌套的列表后,a和b的元素均发生改变print(a) #输出结果:[['a', 123], 1, 'b', 2]print(b) #输出结果:[['a', 123], 1, 'b', 2]
由上图可看出,对象b对a进行拷贝后,只拷贝了第一层,但是嵌套的列表中元素属于第二层,若对第二层元素进行修改,则第二层元素地址发生改变,此时,对象a的元素就会发生改变 此时就可说明,浅拷贝只拷贝第一层,若修改第二层及以上数据,a对象也会随之修改
深拷贝
#首先需引入copy包import copya = [['a', 'abc'], 1, 'b', 2]b=copy.deepcopy(a) #使用copy.deepcopy(需要拷贝的对象),此时就完成了深拷贝b[0][1] = 123 #对拷贝后的嵌套列表进行操作# 从输出结果上可以看到,深拷贝后的对象,不论如何对其元素进行操作,都不会影响对象a,即深拷贝是拷贝所有层print(a) #输出结果:[['a', 'abc'], 1, 'b', 2]print(b) #输出结果:[['a', 123], 1, 'b', 2]
阅读全文
0 0
- python初识之深浅拷贝
- Python之深浅拷贝
- Python之深浅拷贝
- Python学习之深浅拷贝
- Python之赋值与深浅拷贝
- python深浅拷贝
- python 深浅拷贝 进阶
- python 深浅拷贝
- python 深浅拷贝
- python深浅拷贝探究
- python学习-深浅拷贝
- python中的深浅拷贝
- python中的深浅拷贝
- python 深浅拷贝
- PYTHON深浅拷贝
- 【python】深浅拷贝
- C++之深浅拷贝
- C++之深浅拷贝
- 电子科技大学信息与软件工程学院
- C语言实训第一天
- td标签居中
- 完全理解 Python 迭代对象、迭代器、生成器
- 蓝桥杯 基础 Sine之舞
- python初识之深浅拷贝
- 30. Substring with Concatenation of All Words
- 记录一次升级迁移的过程
- 转义字符介绍
- R中处理空间面板模型的包spdep的用法
- JpaRepository查询方法名规范
- STL概述
- (信息学奥赛一本通 1299)糖果
- New Document