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 ...
随机推荐
- 【Mongodb】mongoDB与mongoose---Scheme和Collections对应问题
mongodb是一个基于分布式文件存储的文档型数据库 MongoDB 是一个介于关系数据库和非关系数据库之间的产品 MongoDB 最大的特点是他支持的查询语言非常强大,而且还支持对数据建立索引 官方 ...
- myeclipse 编写java代码提示 dead code 原因
经常使用MyEclipse或Eclipse编辑器编写java代码的程序员,可能经常遇到一个黄线警告提示:dead code:一般程序员遇到这些问题都会置之不理,反正也不影响程序的编译执行.对,这不是b ...
- zabbix数据库占用磁盘空间较大的处理方法
du -h /* |sort -nr 使用此命令一步步排查发现/var/lib/mysql/zabbix/这个目录占用磁盘空间较大 发现history_log.ibd这个文件最大,达到了38G,此文 ...
- 吴裕雄--天生自然python学习笔记:python安装配置tesseract-ocr-setup-3.05.00dev.exe
下载地址:https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-3.05.00dev.exe 点击安装,记得复制安装的路径,待会 ...
- PAT甲级——1012 The Best Rank
PATA1012 The Best Rank To evaluate the performance of our first year CS majored students, we conside ...
- LIS 问题
#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #inc ...
- Elasticsearch Rest模式和RPC模式性能比较
Elasticsearch 有两种链接模式,即Rest方式(对应端口9200)和RPC方式(对应端口9300)这两种访问效率到底差多少,在同样的业务逻辑下,测试了一波. 用的JMeter进行压力测试 ...
- 前端之css引入方式/长度及颜色单位/常用样式
1.css三种引入方式 <!DOCTYPE html><html><head> <meta charset="UTF-8"> < ...
- MOOC(7)- case依赖、读取json配置文件进行多个接口请求-学习mock(7)
学习mock # learn_mock_7.py # 单元测试结合mock思路 import unittest from mock import mock from day_20200208_mooc ...
- nodejs 模块变量 应用
exports.allcodeandname=(function(){ var fs = require('fs'); var data = fs.readFileSync(__dirname+'/a ...