46-Python深浅拷贝
一.引言
在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用
针对该列表l1=['a','b','c',['d','e','f']]
一般有三种方法,分别为:拷贝(赋值)、浅拷贝、深拷贝
注意:拷贝/浅拷贝/深拷贝都是针对可变类型数据而言的
1.1 可变或不可变
ID不变值可变,即在原值的没基础上修改,则为可变数据类型
值遍ID也变,即重新申请一个空间放入新的值,则为不可变数据类型
age = 19
print(f'first:{id(age)}')
age = 20
print(f'second:{id(age)}')
#first:270493056
#second:270493072
二.拷贝
如果L2是L1的拷贝对象,那么L1内部任何元素的变化,L2也会随之改变,因为可变类型id值id不变
l1 = ['1','2','3','4']
l2 = l1
l1.append('g')
print(l1)
print(l2)
#['1', '2', '3', '4', 'g']
#['1', '2', '3', '4', 'g']
三.浅拷贝
如果L2是L1的浅拷贝对象,则L1内的里不可变元素发生了改变,L2 不变
L1内的可变元素发生了改变,则L2会跟着变
import copy
l1 = ['1','2','3',['4','5']]
l2 = copy.copy(l1)
l1.append('6')
print(l1)
print(l2)
#['1', '2', '3', ['4', '5'], '6']
#['1', '2', '3', ['4', '5']]
l1[3].append('7')
print(l1)
print(l2)
#['1', '2', '3', ['4', '5', '7'], '6']
#['1', '2', '3', ['4', '5', '7']]
深拷贝
如果l2是l1的深拷贝对象,那么:
l1内的不可变芫荽发生了改变,l2不变
l1内的可变元素发生了改变,l2叶不变
即:l2不会随l1改变而改变
import copy
l1 = ['1','2','3',['4','5']]
l2 = copy.deepcopy(l1)
l1.append('6')
print(l1)
print(l2)
#['1', '2', '3', ['4', '5'], '6']
#['1', '2', '3', ['4', '5']]
l1[3].append('7')
print(l1)
print(l2)
#['1', '2', '3', ['4', '5', '7'], '6']
#['1', '2', '3', ['4', '5']]
46-Python深浅拷贝的更多相关文章
- Python开发【第二章】:Python深浅拷贝剖析
Python深浅拷贝剖析 Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 一.对象赋值 ...
- 小学生都能学会的python(深浅拷贝)
小学生都能学会的python(深浅拷贝) join() 把列表中的每一项用字符串拼接起来 # lst = ["汪峰", "吴君如", "李嘉欣&quo ...
- 【0806 | Day 9】三张图带你了解数据类型分类和Python深浅拷贝
一.数据类型分类 二.Python深浅拷贝
- 底层剖析Python深浅拷贝
底层剖析Python深浅拷贝 拷贝的用途 拷贝就是copy,目的在于复制出一份一模一样的数据.使用相同的算法对于产生的数据有多种截然不同的用途时就可以使用copy技术,将copy出的各种副本去做各种不 ...
- 关于python深浅拷贝的个人浅见
起初,关于python的深浅拷贝,总是习惯去用传值传址的方式去考虑,发现总是get不到规律,容易记混. python有着高度自治的内存管理,而不可变对象的内存分配,则是能省则省,就是说,无论用什么拷贝 ...
- python深浅拷贝与赋值
初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...
- python 深浅拷贝 进阶
主要理解新与旧究竟在哪里 这样也就理解了 深浅拷贝 先说说赋值,事实上python中的赋值事实上是赋值了一个引用.比如: foo1=1.0 foo2=foo1 用操作符is推断时.你能够发现结果是tr ...
- python深浅拷贝&垃圾回收&上下文管理(with语句)
深浅拷贝 在Python中使用copy模块用于对象的拷贝操作. 该模块提供了两个主要的方法:浅拷贝 copy.copy() 深拷贝 copy.deepcopy() 1.浅拷贝(copy) 浅拷贝: 不 ...
- 关于Python深浅拷贝
拷贝: 说明:原则上就是把数据分离出来,复制其数据,并以后修改互不影响. 何来深浅拷贝的说法? 深浅拷贝的“深”和“浅”可以理解为从变量到硬盘上的物理存储介质之间的层次的多少. 下面用一个示例来解释浅 ...
- python 深浅拷贝 for循环删除
###########################总结########################### 1. 基础数据类型补充 大多数的基本数据类型的知识.已经学完了 a='aaaa' ls ...
随机推荐
- 多对多的三种创建方式-forms相关组件-钩子函数-cookie与session
多对多的三种创建方式 1.全自动(推荐使用的**) 优势:第三张可以任意的扩展字段 缺点:ORM查询不方便,如果后续字段增加更改时不便添加修改 manyToManyField创建的第三张表属于虚拟的, ...
- fibonacci-Heap(斐波那契堆)原理及C++代码实现
斐波那契堆是一种高级的堆结构,建议与二项堆一起食用效果更佳. 斐波那契堆是一个摊还性质的数据结构,很多堆操作在斐波那契堆上的摊还时间都很低,达到了θ(1)的程度,取最小值和删除操作的时间复杂度是O(l ...
- UIView 的Transform属性以及 CGAffineTransform的使用
什么是Transform? Transform是一个3×3的矩阵,如下图所示: 通过这个矩阵我们可以对一个坐标系统进行缩放,平移,旋转以及这两者的任意组着操作.而且矩阵的操作不具备交换律,即矩阵的操作 ...
- space sniffer
space sniffer 一款检测本地磁盘文件占用情况的工具,高效,快速.
- 领域建模-模型验证与面向资源的API设计
使用 UMLet 建模 1. 使用类图,分别对 Asg_RH 文档中 Make Reservation 用例以及 Payment 用例开展领域建模.然后,根据上述模型,给出建议的数据表以及主要字段,特 ...
- 吴裕雄--天生自然python学习笔记:python 建立 Firebase 数据库连接
Python 程序通过 python-firebase 包可以存取 Firebase 数据库. 使用 python-firebase 包 首先必须安装 python-firebase 包,安装方法如下 ...
- day22- hashlib模块-摘要算法(哈希算法)
# python的hashlib提供了常见的摘要算法,如md5(md5算法),sha1等等.摘要:digest # 摘要算法又称哈希算法.散列算法. # 它通过一个函数,把任意长度的数据(明文)转换为 ...
- 80)PHP,扩展工具类
啥是扩展工具类:这个问题很深奥,自己慢慢理解吧. 首先 对于session的处理函数是扩展工具类. ②图片处理类 ③验证码生成类 ④算是项目中的一个功能模块. 扩展工具类 放在我们的framew ...
- Google DevTools Explanation
Evaluating network performance The Network panel records information about each network operation in ...
- [LC] 238. Product of Array Except Self
Given an array nums of n integers where n > 1, return an array output such that output[i] is equ ...