博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python---深浅拷贝
阅读量:4959 次
发布时间:2019-06-12

本文共 1609 字,大约阅读时间需要 5 分钟。

    这篇文章主要介绍了python中的拷贝问题,即不同的拷贝方式得到的新对象,对其进行修改是否影响原对象。了解这一块,首先需要了解数据类型,所以接下来从数据类型讲起。

    依据对象在内存中的组织分类,可以分为以下两种类型:

    一. 原子类型:只能保存单个字面对象的类型, 如数值(所有的数值类型),字符串(全部是文字)。

    二. 容器类型:可容纳多个对象的类型,如 列表,元祖,字典等

   对于原子类型,不存在深浅拷贝的说法,每一个不同的值代表一个新的对象。

1 >>> import copy 2 >>> d=23 3 >>> e0=d 4 >>> e1=copy.copy(d) 5 >>> e2=copy.deepcopy(d) 6 >>> e0=230 7 >>> e1=231 8 >>> e2=232 9 >>> d, e0, e1, e210 (23, 230, 231, 232)

对于容器类型,有以下两种拷贝方式: ini=[12,  'beautiful',  ['we', 'are', 'a', 'team'] ]

1)常见赋值

等号赋值,等号两边指向的是同一个对象,等号左边是对象的别名,不管对别名还是自身操作修改的都是同一内存中的对象。即ini_0 是 ini.

1 >>> ini=[12, 'beautiful', ['we', 'are', 'a', 'team']] 2 >>> ini_0=ini 3 >>> ini_0[0]=120 4 >>> ini_0[1]='cute' 5 >>> ini_0[2].append('world') 6 >>> ini_0 7 [120, 'cute', ['we', 'are', 'a', 'team', 'world']] 8 >>> ini 9 [120, 'cute', ['we', 'are', 'a', 'team', 'world']]10 >>>

2)浅拷贝

浅拷贝产生一个新的对象,但对象中的子对象指向的是原对象,代码效果如下:

1 >>> ini 2 [120, 'cute', ['we', 'are', 'a', 'team', 'world']] 3 >>> ini_1=copy.copy(ini) 4 >>> ini_1[0]=121 5 >>> ini_1[1]='clever' 6 >>> ini_1[2].remove('team') 7 >>> ini_1 8 [121, 'clever', ['we', 'are', 'a', 'world']] 9 >>> ini10 [120, 'cute', ['we', 'are', 'a', 'world']]11 >>>

也就是说,ini_1 不是ini, 但ini_1[i] 是 ini[i]。

3)深拷贝

深拷贝也产生一个新的对象,并且对象中的子对象不指向原对象的子对象,代码效果如下:

1 >>> ini 2 [120, 'cute', ['we', 'are', 'a', 'world']] 3 >>> ini_2=copy.deepcopy(ini) 4 >>> ini_2[0]=122 5 >>> ini_2[1]='happy' 6 >>> ini_2[2].append('family') 7 >>> ini 8 [120, 'cute', ['we', 'are', 'a', 'world']] 9 >>> ini_210 [122, 'happy', ['we', 'are', 'a', 'world', 'family']]11 >>>

也就是说,ini_2 不是ini, 但ini_2[i] 也不是 ini[i]。

转载于:https://www.cnblogs.com/no-tears-girl/p/7592990.html

你可能感兴趣的文章
[转]Android 完美退出 App (Exit)
查看>>
[转]用PROCEDURE ANALYSE优化MYSQL表结构
查看>>
[转]Jquery操作select
查看>>
[转]15 个顶级 HTML5 游戏引擎
查看>>
[转]ASP.NET中的forms验证
查看>>
Qualified name lookup
查看>>
牛逼的产品经理最重要的特质是什么?
查看>>
Shiro学习
查看>>
Linux 目录递归赋权,解决 Linux权限不够
查看>>
面向对象(OO,封装、继承、多态)
查看>>
cmd命令行给main传参数
查看>>
整理了一份招PHP高级工程师的面试题
查看>>
iOS--inputView和inputAccessoryView
查看>>
grep
查看>>
python django 上传文件到七牛
查看>>
sql_calc_found_rows原理
查看>>
链表的反转
查看>>
我要赚钱!
查看>>
Java内存区域
查看>>
叔本华论说文集摘录(一)
查看>>