【Python基础】之深浅拷贝
1.首先介绍一个python的内置函数id()
- id()可以查看传入对象在内存中的地址。
- 在python中,对一些常用的数字或字符串,虽然变量名不同,但是为了节省内存,通常会共享同一个地址,如下代码示例:
# 变量a、b共用内存地址
a = 257
b = 257
print(id(a))#输出:1950671417040
print(id(b))#输出:1950671417040
2.拷贝:
- 当我们对变量a进行拷贝的时候,意味着在内存中开辟一块新的地址存放变量a的值。
- 对于str,int型的数据,无论深浅拷贝,返回的新变量都只是原变量的一个引用,而不会在内存中开辟新的地址。
- 对于其他类型的数据,浅拷贝指只对第一层的元素开辟新的地址,即数据的父亲层,对内层(子孙辈的层)还使用原来的地址。
- 深拷贝指除了最内存的元素使用原来的地址,其他层均在内存中开辟新的地址。
3.举例说明:
- str,int型数据: str型就不再举例,可见无论深浅拷贝,a,b,c都共享内存地址。
import copy
a = 123
#浅拷贝
b = copy.copy(a)
#深拷贝
c = copy.deepcopy(a)
print(id(a))# 输出:1543671728
print(id(b))# 输出:1543671728
print(id(c))# 输出:1543671728
- 其他类型的浅拷贝:
import copy
a = [1, 2, [3, 4, 5], (6, [7, 8])]
#浅拷贝
b = copy.copy(a)
#第一层地址
print(id(a))# 输出:1854916189768
print(id(b))# 输出:1854916187912
#第二层地址
print(id(a[2]))# 输出:2532194133000
print(id(b[2]))# 输出:2532194133000
#第三层往后地址与第二层地址类似
- 其他类型的深拷贝:
import copy
a = [1, 2, [3, 4, 5], (6, [7, 8])]
#深拷贝
b = copy.deepcopy(a)
#第一层地址(不共享)
print(id(a))# 输出:1854916189768
print(id(b))# 输出:1854916187912#第二层地址(不共享)
print(id(a[2]))# 输出:2694868837384
print(id(b[2]))# 输出:2694871380936#.....中间层......#最里层的地址(共享)
print(id(a[2][0]))#输出:1543667888
print(id(b[2][0]))#输出:1543667888
4.图解深浅拷贝:
- 以列表a = [1, 2, [3, 4, 5], (6, [7, 8])]为例
【Python基础】之深浅拷贝相关推荐
- Python赋值与深浅拷贝
# coding=utf-8 #Python 赋值 与深浅拷贝 #Python 赋值时会创建一个新的引用,对不可变对象,实际上象创建一个副本,但对可变对象,因为是引用,当对其中一个对象的元素进行操作时 ...
- python——赋值与深浅拷贝
结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一--python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,我们还是要花一点时间来 ...
- Python系列 18 深浅拷贝
拷贝 copy即拷贝,意在将相同的数据进行复制,以便将复制出的副本应用于不同的操作上,而本体不会受到任何影响. 绝大多数语言中都有深浅拷贝的概念,故此篇文章也是属于通用性文章. 在Python中,除开 ...
- python赋值、深浅拷贝
赋值: 赋值是绑定对象的引用:只要对象被修改,就会发生变化 深浅拷贝 如果希望将列表复制一份,通过列表的内置方法copy就可以实现: s = [[1,2],3,4]s1 = s.copy()print ...
- python学习之深浅拷贝
4.2 深浅拷贝 4.2.1 认识 首先应该知道python中变量在内存中是怎么存放的! 在python中,变量与变量的值占用不同的内存.变量占用的内存,并非直接存储数值,而存储的是值在内存中的地址. ...
- python中的深浅拷贝
1. 浅拷贝 copy.copy 浅拷贝是对于⼀个对象的顶层拷贝 通俗的理解是:拷贝了引⽤,并没有拷贝内容 浅拷贝只复制第一层数据,更深层的引用不管. 2. 深拷贝 copy.dee ...
- python list 的深浅拷贝探索
对于list来讲,除了使用copy.deepcopy()来实现深copy外,还可以使用什么更加简单的方式呢?下面先介绍copy.deepcopy()例子: >>> a = [1] & ...
- 前端面试JS必备基础之深浅拷贝和this指向问题@莫成尘
一:js深拷贝 在JS中,数据类型分为基本数据类型和引用数据类型两种,对于基本数据类型来说,它的值直接存储在栈内存中,而对于引用类型来说,它在栈内存中仅仅存储了一个引用,而真正的数据存储在堆内存中.深 ...
- python中的深浅拷贝的区别
li = [1,1,2,3,4,5,6,7,8,9]l2=li # 这样定义不行共用内存空间,其实是一体# l2 = [1,1,2,3,4,5,6,7,8,9]l3=li[:]for i in l2: ...
- 【Python基础】Python的深浅拷贝讲解
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 在很多语言中都存在深浅拷贝两种拷贝数据的方式,Python中 ...
最新文章
- Python发展迅猛,如何在Python热中脱颖而出了?
- DIV+CSS常见问题的14条原因分析
- linux 关闭开机 ftp,解决linux ftp匿名上传、下载开机自启问题
- java 装配_Spring 通过Java代码装配bean
- html获取节点属性,JS操作属性节点(非常详细)
- [CentOs7]搭建ftp服务器(3)——上传,下载,删除,重命名,新建文件夹
- 虚拟机安装VMware ESXi 6.7安装过程介绍
- 定制属于自己的自动化安装的linux系统镜像
- java 微信开发图片发送,微信开发?Java上传Base64图片
- 要搞懂 volatile 关键字,就靠这 26 张图
- Lodop 打印使用笔记
- 【ENSP模拟器】ENSP——VLAN的配置
- 锯齿波调制的FMCW雷达差拍信号的推导及分析
- java控制发送邮箱(qq邮箱、网易邮箱、新浪邮箱)
- 读书笔记(一)数联网——大数据如何互联
- Oracle中字符串截取最全方法总结
- Protoss and Zerg(第十五届浙江大学宁波理工学院程序设计大赛H)
- 小学四则运算练习软件需求说明
- 怎么领支付宝大红包?技术方面有这三大考量!
- bte上了b网_酷站推荐 - tukkk.com - 小语种口语网