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

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. RSA加密的java实现2(交互IOS)

    这里的base64的依赖不一样,一个是apache,一个是sun的  ,由于base64的依赖不同,导致在IOS中解析不了! package com.handsight.platform.cipher ...

  2. 简析 Golang net/http 包

    net/http 包涵盖了与 HTTP 请求发送和处理的相关代码.虽然包中定义了大量类型.函数,但最重要.最基础的概念只有两个:ServeMux 和 Handler. ServeMux 是 HTTP ...

  3. C#编写dll进行sql server数据库扩展储存过程

    一.编写C#函数文件 1.新建一个类库文件 备注:sqlserver 2008只能用.net3.5版本. 2.如有想加入强命名的话可如下步骤: 参考博文:https://blog.csdn.net/d ...

  4. Hello World 之旅

    本文记录对于下面 `hello.c` 程序在 Linux 上一次运行系统所发生的事情,内容来源于 CSAPP 第一章. #include <stdio.h> int main(int ar ...

  5. 如果使用tf::transform进行简单的不同frame间的pose转换

    tf转换,分为两部分:broadcaster和listener.前者是tf的发布者,后者是接收者.我们如果要建立一个完整的tf体系,需要自己先生成tf信息用broadcaster发布出去,然后再在需要 ...

  6. 手把手教你用深度学习做物体检测(六):YOLOv2介绍

    本文接着上一篇<手把手教你用深度学习做物体检测(五):YOLOv1介绍>文章,介绍YOLOv2在v1上的改进.有些性能度量指标术语看不懂没关系,后续会有通俗易懂的关于性能度量指标的介绍文章 ...

  7. 2019 Multi-University Training Contest 2

    2019 Multi-University Training Contest 2 A. Another Chess Problem B. Beauty Of Unimodal Sequence 题意 ...

  8. CodeForces 809B Glad to see you!

    Glad to see you! 题解: 交互题一般都是需要用二分去完成. 在二分时候每次检查左边和右边哪边会和答案更近, 然后在更近的那段新区间去重复检查, 知道区间长度为1. 在检查的时候,可以使 ...

  9. CF - 652 E Pursuit For Artifacts 边双联通

    题目传送门 题解总结起来其实很简单. 把所有的边双联通分量缩成一个点,然后建立好新边, 然后再从起点搜到终点就好了. 代码: /* code by: zstu wxk time: 2019/02/23 ...

  10. 天梯杯 L2-003. 月饼

    L2-003. 月饼 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不 ...