Python学习-列表深浅拷贝
一、先看一个简单的赋值语句
lst1 = ['France', 'Belgium', 'England']
lst2 = lst1
# lst1.append('Uruguay')
lst2.append('Uruguay')
print(lst1, lst2)
# 猜测一下lst1, lst2的结果;lst2变化是否对lst1产生影响,lst1变化是否对lst2产生影响
输出结果:
['France', 'Belgium', 'England', 'Uruguay'] ['France', 'Belgium', 'England', 'Uruguay']
不知道你是否猜对了?是否对输出结果感到疑惑?我们来看一下,在内存中变量与对象的对应关系,以及具体变化。
(图画的不是很好, Pages工具用的不是很熟, 请见谅)
由上图可知,改变lst1或lst2,lst1和lst2同时发生变化。
二、列表的浅拷贝
浅拷贝(copy): 拷贝父对象, 不会拷贝对象的内部的子对象.
1、代码示例1
# 浅拷贝
movies = ['药神', '邪不压正', ['美国往事', '辛德勒的名单'], '无问西东']
movies_c = movies.copy() movies.append('解救吾先生') # 直接改变movies列表
print('movies:', movies)
print('movies_c', movies_c) # 运行结果
movies: ['药神', '邪不压正', ['美国往事', '辛德勒的名单'], '无问西东', '解救吾先生']
movies_c ['药神', '邪不压正', ['美国往事', '辛德勒的名单'], '无问西东']
2、代码示例2
# 浅拷贝
movies = ['药神', '邪不压正', ['美国往事', '辛德勒的名单'], '无问西东']
movies_c = movies.copy() movies[2].append('教父') # 改变列表内部嵌套的列表
print('movies:', movies)
print('movies_c', movies_c) # 运行结果
movies: ['药神', '邪不压正', ['美国往事', '辛德勒的名单', '教父'], '无问西东']
movies_c ['药神', '邪不压正', ['美国往事', '辛德勒的名单', '教父'], '无问西东']
结论:
1) 由代码示例1和示例2的结果可以看出, 直接改变列表(一级元素增删改), 拷贝的列表不受影响;
2) 当改变列表内部嵌套的列表的元素时, 拷贝的列表也受影响.
三、列表的深拷贝
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
1、代码示例3
# 深拷贝
import copy
movies = ['药神', '邪不压正', ['美国往事', '辛德勒的名单'], '无问西东']
movies_c = copy.deepcopy(movies) movies.append('万箭穿心')
print('movies:', movies)
print('movies_c:', movies_c) 运行结果:
movies: ['药神', '邪不压正', ['美国往事', '辛德勒的名单'], '无问西东', '万箭穿心']
movies_c: ['药神', '邪不压正', ['美国往事', '辛德勒的名单'], '无问西东']
2、代码示例4
# 深拷贝
import copy
movies = ['药神', '邪不压正', ['美国往事', '辛德勒的名单'], '无问西东']
movies_c = copy.deepcopy(movies) movies[2].append('这个杀手不太冷')
print('movies:', movies)
print('movies_c:', movies_c) 运行结果:
movies: ['药神', '邪不压正', ['美国往事', '辛德勒的名单', '这个杀手不太冷'], '无问西东']
movies_c: ['药神', '邪不压正', ['美国往事', '辛德勒的名单'], '无问西东']
结论: 不管是直接改变列表(一级元素增删改), 还是改变列表内部嵌套的列表, 拷贝的列表不受影响.
深浅拷贝, 参考了菜鸟教程, 点击跳转. 拷贝前后, 变量与对象在内存中的对应关系, 可以参考教程中的图文解释.
Python学习-列表深浅拷贝的更多相关文章
- Python学习(006)-深浅拷贝及集合
深浅拷贝 import copy husband=['xiaoxin',123,[200000,100000]] wife=husband.copy() #浅拷贝 wife[0]='xiaohong ...
- python学习之深浅拷贝
4.2 深浅拷贝 4.2.1 认识 首先应该知道python中变量在内存中是怎么存放的! 在python中,变量与变量的值占用不同的内存.变量占用的内存,并非直接存储数值,而存储的是值在内存中的地址. ...
- Python学习 :深浅拷贝
深浅拷贝 一.浅拷贝 只拷贝第一层数据(不可变的数据类型),并创建新的内存空间进行储蓄,例如:字符串.整型.布尔 除了字符串以及整型,复杂的数据类型都使用一个共享的内存空间,例如:列表 列表使用的是同 ...
- day8 python学习 集合 深浅拷贝
1.内存地址: 字符串在20位以内,没有空格,没有特殊字符的情况下,同样的字符串内存地址是一样的 2.元组中:在只有一个值的时在后边加逗号和没有逗号的区别 t1=(1) 不加逗号这个值是什么类型就打印 ...
- python学习day7 深浅拷贝&文件操作
4-4 day07 深浅拷贝&文件操作 .get()用法 返回指定键的值,如果值不在字典中返回默认值. info={'k1':'v1,'K2':'v2'}mes = info.get('k1' ...
- 第五篇python进阶之深浅拷贝
目录 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 二.拷贝(只针对可变数据类型) 三.浅拷贝 四.深拷贝 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 id不 ...
- 天啦噜!仅仅5张图,彻底搞懂Python中的深浅拷贝
Python中的深浅拷贝 在讲深浅拷贝之前,我们先重温一下 is 和==的区别. 在判断对象是否相等比较的时候我们可以用is 和 == is:比较两个对象的引用是否相同,即 它们的id 是否一样 == ...
- Python 中的深浅拷贝
Python 中的深浅拷贝 参考文献:https://blog.csdn.net/lnotime/article/details/81194633 参考文献:https://blog.csdn.net ...
- Python基础:深浅拷贝
对于数字.字符串深浅拷贝: import copy num = 0 copy_num = copy.copy(num) print("These are normal copy") ...
随机推荐
- Top11 构建和测试API的工具
立刻像专业人士一样构建API 组织正在改变他们已经在软件应用项目中成功的微服务架构模型,这就是大多数微服务项目使用API(应用程序接口)的原因. 我们要为微服务喝彩,因为它相对于其他的模型有各种先进的 ...
- python 25 类的成员
目录 1. 类的私有成员 -- __ 1.1 类的私有静态属性 1.2 类的私有方法 1.3 对象的私有方法 2. 类的其他方法 2.1 类方法 @classmethod 2.2 静态方法 @stat ...
- python 18 re模块
目录 re 模块 1. 正则表达式 2. 匹配模式 3. 常用方法 re 模块 1. 正则表达式 \w 匹配字母(包含中文)或数字或下划线 \W 匹配非字母(包含中文)或数字或下划线 \s 匹配任意的 ...
- C函数指针状态机实现
C函数指针状态机实现 有限状态机(finite state machine)简称FSM,表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用.FSM是一种逻辑单元内部 ...
- Spring Boot 2.0 教程 | 快速集成整合消息中间件 Kafka
欢迎关注个人微信公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site ...
- c++学习笔记_4
前言:本笔记所对应的课程为中国大学mooc中北京大学的程序设计与算法(三)C++面向对象程序设计,主要供自己复习使用,且本笔记建立在会使用c和java的基础上,只针对与c和java的不同来写 运算符重 ...
- 特殊字符处理 java-jsp
public String dealStr(String name){ String newStr=""; if(name != null && name.leng ...
- HDU- 3605 - Escape 最大流 + 二进制压位
HDU - 3605 : acm.hdu.edu.cn/showproblem.php?pid=3605 题目: 有1e5的的人,小于10个的星球,每个星球都有容量,每个人也有适合的星球和不适合的星球 ...
- 2015北京区域赛 Xiongnu's Land
Wei Qing (died 106 BC) was a military general of the Western Han dynasty whose campaigns against the ...
- NOIP 2005 等价表达式 题解
题意 给一个表达式然后再给n个表达式,判断是否等价 一道大模拟题,将a带为数,并且取模防止溢出 #include<bits/stdc++.h> using namespace std; c ...