zoukankan      html  css  js  c++  java
  • 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表示内存地址):

  • 相关阅读:
    eclipse maven Errors while generating javadoc on java8
    log4j升级到logback
    httpclient新旧版本分割点4.3
    javadoc中{@link}与@see的简单使用以及区别
    maven-shade-plugin插件
    jar中META-INF
    dubbo环境搭建与tomcat集成、DEMO示例、常见问题(最完整版本、带管理控制台、监控中心、zookeeper)
    叶亚明:合格CTO的六要素(转)
    rocketmq安装与基本操作
    当我们在谈论技术时,技术的本质和价值究竟是什么?
  • 原文地址:https://www.cnblogs.com/suhaha/p/8535745.html
Copyright © 2011-2022 走看看