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开始 初始化列表(初始化一个包含五个元素 ...
随机推荐
- 606. Construct String from Binary Tree 从二叉树中构建字符串
[抄题]: You need to construct a string consists of parenthesis and integers from a binary tree with th ...
- linux系统中的命令替换与整数运算$(),$(())
一.$()与`` 在 bash shell 中,$( ) 与 ` ` (反引号) 都是用来做命令替换(command substitution)用的. 所谓的命令替换与我们第五章学过的变量替换差不多, ...
- Oracle VM VirtualBox 部署CS devcloud2 开发环境
Setting up (VirtualBox) 1. Get the new DevCloud 2.0 virtual appliance. The new image was created usi ...
- Window: move\copy\xcopy
Move 移动文件和重命名文件与目录. 要移动一个或多个文件: MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination 要重命名目录: MO ...
- 手把手教你生成二维码-google.zxing
一.目标 输入网址,生成网址的二维码 二.概况 1.效果:UI丑,但功能实现了 2.项目目录 三.用到的第三方资源 1.google的扫码包zxing 2.JQuery 四.步骤(用myEclipse ...
- 读取位图(bitmap)实现及其要点
位图的格式如下: 1.文件头信息块 0000-0001 :文件标识,为字母ASCII码“BM”. 0002-0005 :文件大小. 0006-0009 :保留,每字节以“00”填写. 000A-000 ...
- 王子和公主 UVa10635
[题目描述]:王子和公主 一个王子和公主在n*n的格子中行走,这些格子是有1....n^2的编号的.现在给定p+1个数,再给定q+1个数,公主和王子可以选择其中某些格子行走,求他们最多能走几个相同的格 ...
- N-Gram的数据结构
ARPA的n-gram语法如下: [html] view plaincopyprint? \data\ ngram 1=64000 ngram 2=522530 ngram 3=173445 \1-g ...
- 4.4.4 无锁的对象引用:AtomicReference和AtomicStampedReference
AtomicReference 这个类和AtomicInteger非常类似,只是AtomicReference对应普通的对象引用,而AtomicInteger 它是对整数的封装,它的方法如下 对wea ...
- .NET开源MSSQL、Redis监控产品Opserver之Redis配置
安全与基础配置地址:http://www.cnblogs.com/xiaopotian/p/6898310.html edis监控数据实例的加载可以查看Opserver.Core项目data/Redi ...