一、先看一个简单的赋值语句

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学习-列表深浅拷贝的更多相关文章

  1. Python学习(006)-深浅拷贝及集合

     深浅拷贝 import copy husband=['xiaoxin',123,[200000,100000]] wife=husband.copy() #浅拷贝 wife[0]='xiaohong ...

  2. python学习之深浅拷贝

    4.2 深浅拷贝 4.2.1 认识 首先应该知道python中变量在内存中是怎么存放的! 在python中,变量与变量的值占用不同的内存.变量占用的内存,并非直接存储数值,而存储的是值在内存中的地址. ...

  3. Python学习 :深浅拷贝

    深浅拷贝 一.浅拷贝 只拷贝第一层数据(不可变的数据类型),并创建新的内存空间进行储蓄,例如:字符串.整型.布尔 除了字符串以及整型,复杂的数据类型都使用一个共享的内存空间,例如:列表 列表使用的是同 ...

  4. day8 python学习 集合 深浅拷贝

    1.内存地址: 字符串在20位以内,没有空格,没有特殊字符的情况下,同样的字符串内存地址是一样的 2.元组中:在只有一个值的时在后边加逗号和没有逗号的区别 t1=(1) 不加逗号这个值是什么类型就打印 ...

  5. python学习day7 深浅拷贝&文件操作

    4-4 day07 深浅拷贝&文件操作 .get()用法 返回指定键的值,如果值不在字典中返回默认值. info={'k1':'v1,'K2':'v2'}mes = info.get('k1' ...

  6. 第五篇python进阶之深浅拷贝

    目录 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 二.拷贝(只针对可变数据类型) 三.浅拷贝 四.深拷贝 第五篇python进阶之深浅拷贝 一.引言 1.1可变 和不可变 id不 ...

  7. 天啦噜!仅仅5张图,彻底搞懂Python中的深浅拷贝

    Python中的深浅拷贝 在讲深浅拷贝之前,我们先重温一下 is 和==的区别. 在判断对象是否相等比较的时候我们可以用is 和 == is:比较两个对象的引用是否相同,即 它们的id 是否一样 == ...

  8. Python 中的深浅拷贝

    Python 中的深浅拷贝 参考文献:https://blog.csdn.net/lnotime/article/details/81194633 参考文献:https://blog.csdn.net ...

  9. Python基础:深浅拷贝

    对于数字.字符串深浅拷贝: import copy num = 0 copy_num = copy.copy(num) print("These are normal copy") ...

随机推荐

  1. Top11 构建和测试API的工具

    立刻像专业人士一样构建API 组织正在改变他们已经在软件应用项目中成功的微服务架构模型,这就是大多数微服务项目使用API(应用程序接口)的原因. 我们要为微服务喝彩,因为它相对于其他的模型有各种先进的 ...

  2. python 25 类的成员

    目录 1. 类的私有成员 -- __ 1.1 类的私有静态属性 1.2 类的私有方法 1.3 对象的私有方法 2. 类的其他方法 2.1 类方法 @classmethod 2.2 静态方法 @stat ...

  3. python 18 re模块

    目录 re 模块 1. 正则表达式 2. 匹配模式 3. 常用方法 re 模块 1. 正则表达式 \w 匹配字母(包含中文)或数字或下划线 \W 匹配非字母(包含中文)或数字或下划线 \s 匹配任意的 ...

  4. C函数指针状态机实现

    C函数指针状态机实现 有限状态机(finite state machine)简称FSM,表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用.FSM是一种逻辑单元内部 ...

  5. Spring Boot 2.0 教程 | 快速集成整合消息中间件 Kafka

    欢迎关注个人微信公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site ...

  6. c++学习笔记_4

    前言:本笔记所对应的课程为中国大学mooc中北京大学的程序设计与算法(三)C++面向对象程序设计,主要供自己复习使用,且本笔记建立在会使用c和java的基础上,只针对与c和java的不同来写 运算符重 ...

  7. 特殊字符处理 java-jsp

    public String dealStr(String name){ String newStr=""; if(name != null && name.leng ...

  8. HDU- 3605 - Escape 最大流 + 二进制压位

    HDU - 3605 : acm.hdu.edu.cn/showproblem.php?pid=3605 题目: 有1e5的的人,小于10个的星球,每个星球都有容量,每个人也有适合的星球和不适合的星球 ...

  9. 2015北京区域赛 Xiongnu's Land

    Wei Qing (died 106 BC) was a military general of the Western Han dynasty whose campaigns against the ...

  10. NOIP 2005 等价表达式 题解

    题意 给一个表达式然后再给n个表达式,判断是否等价 一道大模拟题,将a带为数,并且取模防止溢出 #include<bits/stdc++.h> using namespace std; c ...