P01-Python中列表的复制问题
(1)使用=直接赋值
a = [1, 2, 3, [6, 7]]
b = a
初始情况:
a: [1, 2, 3, [6, 7]]
b: [1, 2, 3, [6, 7]]
------------------
修改a[1] = 5之后的情况
a: [1, 5, 3, [6, 7]]
b: [1, 5, 3, [6, 7]]
------------------
修改b[2] = 8之后的情况
a: [1, 5, 8, [6, 7]]
b: [1, 5, 8, [6, 7]]
------------------
修改a[3][0] = 10之后的情况
a: [1, 5, 8, [10, 7]]
b: [1, 5, 8, [10, 7]]
------------------
修改b[3][0] = 20之后的情况
a: [1, 5, 8, [20, 7]]
b: [1, 5, 8, [20, 7]]
------------------
此时我理解中的内存图如下所示(0x0012xx表示内存地址):

即:使用=直接赋值,是引用赋值,更改任何其中一个,另一个都会改变。可以理解为:将列表a的指针赋值给b,此时a,b共用一个内存空间。
(2)使用b = a[:]或者b = a.copy()或者b = list(a)或者b = [i for i in a]或者copy模块的b = copy.copy(a)方法复制的情况
a = [1, 2, 3, [6, 7]]
b = a.copy() #或b = a[:]或b = list(a)或b = [i for i in a]或b = copy.copy(a)
初始情况:
a: [1, 2, 3, [6, 7]]
b: [1, 2, 3, [6, 7]]
------------------
修改a[1] = 5之后的情况
a: [1, 5, 3, [6, 7]]
b: [1, 2, 3, [6, 7]]
------------------
修改b[2] = 8之后的情况
a: [1, 5, 3, [6, 7]]
b: [1, 2, 8, [6, 7]]
------------------
修改a[3][0] = 10之后的情况
a: [1, 5, 3, [10, 7]]
b: [1, 2, 8, [10, 7]]
------------------
修改b[3][0] = 20之后的情况
a: [1, 5, 3, [20, 7]]
b: [1, 2, 8, [20, 7]]
------------------
此时我理解中的内存图示这样的(0x0012xx表示内存地址):

(3)使用copy模块的deepcopy方法复制
import copy
a = [1, 2, 3, [6, 7]]
b = copy.deepcopy(a)
初始情况:
a: [1, 2, 3, [6, 7]]
b: [1, 2, 3, [6, 7]]
------------------
修改a[1] = 5之后的情况
a: [1, 5, 3, [6, 7]]
b: [1, 2, 3, [6, 7]]
------------------
修改b[2] = 8之后的情况
a: [1, 5, 3, [6, 7]]
b: [1, 2, 8, [6, 7]]
------------------
修改a[3][0] = 10之后的情况
a: [1, 5, 3, [10, 7]]
b: [1, 2, 8, [6, 7]]
------------------
修改b[3][0] = 20之后的情况
a: [1, 5, 3, [10, 7]]
b: [1, 2, 8, [20, 7]]
------------------
此时我理解中的内存图示如下(0x0012xx以及0x0024xx表示内存地址):

P01-Python中列表的复制问题的更多相关文章
- 对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
引用:https://www.jb51.net/article/142775.htm 列表赋值: 1 2 3 4 5 6 7 >>> a = [1, 2, 3] >>&g ...
- python中列表和元组以及字符串的操作
python中列表是非常好用的.不过有一些使用小细节还需要注意一下. tag[32:-4] 从index为32到tag的倒数第4个字符. 如果索引为32的值在倒数第4个字符的右边,那么将输出为空.只要 ...
- python中文件的复制
python中文件的复制 python的os模块有很多文件目录相关的函数,但没有提供直接复制文件的函数,当然可以通过边都边写的方式复制文件.想要直接复制文件可以通过shutil模块 shutil模块是 ...
- Python中列表,元组,字典,集合的区别
参考文档https://blog.csdn.net/Yeoman92/article/details/56289287 理解Python中列表,元组,字典,集合的区别 列表,元组,字典,集合的区别是p ...
- python中列表元素连接方法join用法实例
python中列表元素连接方法join用法实例 这篇文章主要介绍了python中列表元素连接方法join用法,实例分析了Python中join方法的使用技巧,非常具有实用价值,分享给大家供大家参考. ...
- python中列表和元组的操作(结尾格式化输出小福利)
一. 列表 1. 查 names = "YanFeixu WuYifan" names_1 = ["YanFeixu"," WuYifan" ...
- Python中列表的各种方法
列表是Python中一种常用的存储信息的方式,所以要熟练掌握列表的各种方法: 首先我们定义一个列表(name),然后练习里面的各种方法: >>> name = ["Sora ...
- Python中list的复制及深拷贝与浅拷贝探究
在Python中,经常要对一个list进行复制.对于复制,自然的就有深拷贝与浅拷贝问题.深拷贝与浅拷贝的区别在于,当从原本的list复制出新的list之后,修改其中的任意一个是否会对另一个造成影响,即 ...
- Python中列表操作进阶及元组
列表高级操作 一.遍历列表 >>> ls=['a','d','it'] >>> for val in ls: ... print (val) ... a d it ...
- Python中列表的使用
python中的列表与java中的数组非常类似,但使用方法比java中数组简单很多,python中的数据类型不需要显示声明,但在使用时必须赋值,列表元素下标从0开始 初始化列表(初始化一个包含五个元素 ...
随机推荐
- C++ std::vector
std::vector template < class T, class Alloc = allocator<T> > class vector; // generic te ...
- java 线程的几个注解
Java并发编程中,用到了一些专门为并发编程准备的 Annotation. 主要包括三类: 类 Annotation(注解) 就像名字一样,这些注解是针对类的.主有要以下三个: @ThreadSafe ...
- 详解python包管理器pip安装
pip对于使用python的朋友并不陌生,当你想安装python模块的时候一定会首先想到它.pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品. 今天来说 ...
- 提高你的Python能力:理解单元测试
对于程序开发新手来说,一个最常见的困惑是测试的主题.他们隐约觉得“单元测试”是很好的,而且他们也应该做单元测试.但他们却不懂这个词的真正含义.如果这听起来像是在说你,不要怕!在这篇文章中,我将介绍什么 ...
- Python爬虫入门四之Urllib库的高级用法
1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...
- HUST软测1504班第2周作业成绩:WordCount
说明 本次公布的成绩为第2周个人作业WordCount的结果: 第2周个人作业:WordCount 如果同学对作业结果存在异议,可以: 在毕博平台讨论区的第2周作业第在线答疑区发帖申诉. 或直接在博客 ...
- mongoTemplate查询
1.精确查询用“is” Criteria criteria=new Criteria("namespaceName"); criteria.is(namespaceName); Q ...
- jQuary总结7:动画操作,显示与隐藏 淡入淡出, 滑入滑出
1 jquery提供了三组基本动画,这些动画都是标准的.有规律的效果,jquery还提供了自定义动画的功能. 2 显示与隐藏: show([speed],[easing],[callback]) 显示 ...
- 编写高质量代码改善C#程序的157个建议——建议136:优先使用后缀表示已有类型的新版本
建议136:优先使用后缀表示已有类型的新版本 加后缀在某些情况下是很奇怪的形式,我们都不愿意看到OrderProcessor2这样的类型.但是,有的时候仍旧有必要这样做.最典型的是FCL中关于数字证书 ...
- 编写高质量代码改善C#程序的157个建议——建议131:用PascalCasing命名公开元素
建议131:用PascalCasing命名公开元素 开放给调用者的属性.字段和方法都应该采用PascalCasing命名方法,比如: class Person { public string Firs ...