博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十一篇 浅拷贝和深拷贝
阅读量:5116 次
发布时间:2019-06-13

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

第十一篇 浅拷贝和深拷贝

## 预备知识

  • 在python的变量知识中,定义一个变量,是在内存中分配一块空间,在这块空间上“贴上”引用(引用就是变量名),空间里面是变量值(地址就是这个空间)
  • 对于不可变数据类型,当我们改变它的值时,实际上是重新分配一块空间来存放改过的值,将原来的引用(变量名)从原对象上“撕”下来,“贴”到新分配的空间上
  • 对于可变数据类型,以列表为例,定义一个列表,内存给它分配一块空间,这块空间上“贴”着列表的引用,空间里面是元素的索引序列(类似于数组的下标),这些索引序列连着各个元素的引用,各个元素也有它们各自的空间,它们各自的空间上“贴”着各自的引用,当我们改变列表的值时(这里只限于讨论改变列表内元素的值,如果重新定义列表,列表的地址当然也会改变,其内部元素的地址也必然改变),内存会重新分配一块空间,将指向被改元素的引用“撕”下来,贴到新分配的元素空间上

# 我们从针对列表 lis = [1,2,'king',[4,'male']] 来理解拷贝(赋值)、浅拷贝、深拷贝的意义

## 1 拷贝

  • 直接赋值,默认为浅拷贝传递对象的引用,原始对象改变,被赋值的对象也会做相同的改变
lis = [1,2,'king',[4,'male']] a = lisprint(a)lis.append('cool')print(a)'''结果是:[1, 2, 'king', [4, 'male']][1, 2, 'king', [4, 'male'], 'cool']'''

## 2 浅拷贝

  • copy.copy() 浅拷贝,只拷贝了父对象,没有拷贝子对象,所以子对象中的数据改变,拷贝对象中的子对象也会改变
#**copy.copy()  需要先导入copy这个模块**import copylis = [1,2,'king',[4,'male']] a = copy.copy(lis)print(a)lis.append('age')print(a)lis[3].append('cool')print(a)print(lis)'''结果是:[1, 2, 'king', [4, 'male']][1, 2, 'king', [4, 'male']][1, 2, 'king', [4, 'male', 'cool']][1, 2, 'king', [4, 'male', 'cool'], 'age']'''

## 3 深拷贝

  • **copy.deepcopy() 深拷贝,拷贝了父对象也拷贝了里面的子对象,所以对被拷贝对象的操作,完全不会影响拷贝对象
#**copy.deepcopy()  需要先导入copy这个模块**import copylis = [1,2,'king',[4,'male']] a = copy.deepcopy(lis)print(a)lis.append('age')print(a)lis[3].append('cool')print(a)print(lis)'''结果是:[1, 2, 'king', [4, 'male']][1, 2, 'king', [4, 'male']][1, 2, 'king', [4, 'male']][1, 2, 'king', [4, 'male', 'cool'], 'age']'''

转载于:https://www.cnblogs.com/itboy-newking/p/10849693.html

你可能感兴趣的文章
Android打包key密码丢失找回
查看>>
VC6.0调试技巧(一)(转)
查看>>
类库与框架,强类型与弱类型的闲聊
查看>>
webView添加头视图
查看>>
php match_model的简单使用
查看>>
在NT中直接访问物理内存
查看>>
Intel HEX 文件格式
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>