(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中列表的复制问题的更多相关文章

  1. 对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解

    引用:https://www.jb51.net/article/142775.htm 列表赋值: 1 2 3 4 5 6 7 >>> a = [1, 2, 3] >>&g ...

  2. python中列表和元组以及字符串的操作

    python中列表是非常好用的.不过有一些使用小细节还需要注意一下. tag[32:-4] 从index为32到tag的倒数第4个字符. 如果索引为32的值在倒数第4个字符的右边,那么将输出为空.只要 ...

  3. python中文件的复制

    python中文件的复制 python的os模块有很多文件目录相关的函数,但没有提供直接复制文件的函数,当然可以通过边都边写的方式复制文件.想要直接复制文件可以通过shutil模块 shutil模块是 ...

  4. Python中列表,元组,字典,集合的区别

    参考文档https://blog.csdn.net/Yeoman92/article/details/56289287 理解Python中列表,元组,字典,集合的区别 列表,元组,字典,集合的区别是p ...

  5. python中列表元素连接方法join用法实例

    python中列表元素连接方法join用法实例 这篇文章主要介绍了python中列表元素连接方法join用法,实例分析了Python中join方法的使用技巧,非常具有实用价值,分享给大家供大家参考. ...

  6. python中列表和元组的操作(结尾格式化输出小福利)

    一. 列表 1. 查 names = "YanFeixu WuYifan" names_1 = ["YanFeixu"," WuYifan" ...

  7. Python中列表的各种方法

    列表是Python中一种常用的存储信息的方式,所以要熟练掌握列表的各种方法: 首先我们定义一个列表(name),然后练习里面的各种方法: >>> name = ["Sora ...

  8. Python中list的复制及深拷贝与浅拷贝探究

    在Python中,经常要对一个list进行复制.对于复制,自然的就有深拷贝与浅拷贝问题.深拷贝与浅拷贝的区别在于,当从原本的list复制出新的list之后,修改其中的任意一个是否会对另一个造成影响,即 ...

  9. Python中列表操作进阶及元组

    列表高级操作 一.遍历列表 >>> ls=['a','d','it'] >>> for val in ls: ... print (val) ... a d it ...

  10. Python中列表的使用

    python中的列表与java中的数组非常类似,但使用方法比java中数组简单很多,python中的数据类型不需要显示声明,但在使用时必须赋值,列表元素下标从0开始 初始化列表(初始化一个包含五个元素 ...

随机推荐

  1. 606. Construct String from Binary Tree 从二叉树中构建字符串

    [抄题]: You need to construct a string consists of parenthesis and integers from a binary tree with th ...

  2. linux系统中的命令替换与整数运算$(),$(())

    一.$()与`` 在 bash shell 中,$( ) 与 ` ` (反引号) 都是用来做命令替换(command substitution)用的. 所谓的命令替换与我们第五章学过的变量替换差不多, ...

  3. Oracle VM VirtualBox 部署CS devcloud2 开发环境

    Setting up (VirtualBox) 1. Get the new DevCloud 2.0 virtual appliance. The new image was created usi ...

  4. Window: move\copy\xcopy

    Move 移动文件和重命名文件与目录. 要移动一个或多个文件: MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination 要重命名目录: MO ...

  5. 手把手教你生成二维码-google.zxing

    一.目标 输入网址,生成网址的二维码 二.概况 1.效果:UI丑,但功能实现了 2.项目目录 三.用到的第三方资源 1.google的扫码包zxing 2.JQuery 四.步骤(用myEclipse ...

  6. 读取位图(bitmap)实现及其要点

    位图的格式如下: 1.文件头信息块 0000-0001 :文件标识,为字母ASCII码“BM”. 0002-0005 :文件大小. 0006-0009 :保留,每字节以“00”填写. 000A-000 ...

  7. 王子和公主 UVa10635

    [题目描述]:王子和公主 一个王子和公主在n*n的格子中行走,这些格子是有1....n^2的编号的.现在给定p+1个数,再给定q+1个数,公主和王子可以选择其中某些格子行走,求他们最多能走几个相同的格 ...

  8. N-Gram的数据结构

    ARPA的n-gram语法如下: [html] view plaincopyprint? \data\ ngram 1=64000 ngram 2=522530 ngram 3=173445 \1-g ...

  9. 4.4.4 无锁的对象引用:AtomicReference和AtomicStampedReference

    AtomicReference 这个类和AtomicInteger非常类似,只是AtomicReference对应普通的对象引用,而AtomicInteger 它是对整数的封装,它的方法如下 对wea ...

  10. .NET开源MSSQL、Redis监控产品Opserver之Redis配置

    安全与基础配置地址:http://www.cnblogs.com/xiaopotian/p/6898310.html edis监控数据实例的加载可以查看Opserver.Core项目data/Redi ...