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

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. shiro登录名的获取

    登录名的获取:通过的SecurityUtils的shiro import org.apache.shiro.SecurityUtils; //登录用户名 String loginAccount = S ...

  2. input的onchange 和oninput事件

    一个小的功能,也体现了了这几天写程序过程中的遇到的一些常发事件,准备有时间研究一下jQuery和原生js,问题的出现:使用jQuery获取到的节点到底是属于什么,有些事件 居然不能用,就如我今天用到的 ...

  3. 林大妈的CSS知识清单(一)添加样式

    回顾CSS选择符,学习接入样式的更多方式. 一.选择符 1. 种类 ① 类型选择符:直接的HTML标签名,例如: body.p.div 等: ② 后代选择符:空格,例如: div p 选择div中的所 ...

  4. 「每日五分钟,玩转JVM」:线程共享区

    前言 上一篇中,我们了解了JVM中的线程独占区,这节课我们就来了解一下JVM中的线程共享区,JVM中的线程共享区是跟随JVM启动时一起创建的,包括堆(Heap)和方法区()两部分,而线程独占区的程序计 ...

  5. CSS 之Grid网格大致知识梳理1

    CSS所提供的关于网格Grid属性让我们可以更方便编写页面以及布局,而它的一些主要应用属性如下: 1.将父容器的display属性值设置为grid 即可将其转换为网格容器: 2.在网格容器中添加列的属 ...

  6. Java 并发编程(一):摩拳擦掌

    这篇文章的标题原本叫做——Java 并发编程(一):简介,作者名叫小二.但我在接到投稿时觉得这标题不够新颖,不够吸引读者的眼球,就在发文的时候强行修改了标题(也不咋滴). 小二是一名 Java 程序员 ...

  7. 11 python与redis交互

    安装:pip install redis 导入模块:from redis import * 创建StrictRedis 通过init创建对象,指定参数host.port与指定的服务器和端口连接. ho ...

  8. 牛客OI测试赛 F 子序列 组合数学 欧拉降幂公式模板

    链接:https://www.nowcoder.com/acm/contest/181/F来源:牛客网 题目描述 给出一个长度为n的序列,你需要计算出所有长度为k的子序列中,除最大最小数之外所有数的乘 ...

  9. 牛客小白月赛4 C 病菌感染 dfs

    链接:https://www.nowcoder.com/acm/contest/134/C来源:牛客网 题目描述 铁子和顺溜上生物课的时候不小心将几滴超级病菌滴到了培养皿上,这可急坏了他们. 培养皿可 ...

  10. 【Leetcode】【简单】【66. 加一】【JavaScript】

    题目描述 66. 加一 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字. 你可以假设除了整数 0 之外,这个整数不会以零 ...