• 【Python】[List][append][insert]神奇的联动机制


    从菜鸟教程上看来的,本地实验了一把:

    >>> a=[[0,1],[1,2],[2,3]]
    >>> a.insert(2,a[1])
    >>> a.append(a[3])
    >>> print (a)
    [[0, 1], [1, 2], [1, 2], [2, 3], [2, 3]]

    增_元素:list.insert(INDEX, "{ELEMENT_NAME}")

    在列表指定位置添加新的对象

    增_元素:list.append(“{ELEMENT_NAME}”)

    在列表末尾添加新的对象

    然后进行打印:

    可以看到,最后的输出,符合预期;

    用 id() 函数查看内存地址:

    id(a[1])==id(a[2])      #True
    id(a[3])==id(a[4])       #True

    所谓的联动:

    >>> a[1][1]=0
    >>> a[4][1]=4
    >>> print(a)
    [[0, 1], [1, 0], [1, 0], [2, 4], [2, 4]]
    >>>

    可以看到:

    a[1][1]和a[2][1]都发生了改变;

    a[3][1]和a[4][1]都发生了改变;

    其中:

    a[2]是从a[1]来的;

    a[4]是从a[3]来的;

    如果想只修改其中一个元素(子列表),必须把该子列表完整定义一遍,如在上述代码后增加:

    a[1]=[1,1]
    print(a)

    则输出为:

    [[0,1],[1,1],[1,0],[2,4],[2,4]]

    此后再修改子元素,不会发生联动:

    a[1][1]=5
    print(a)

    输出为:

    [[0,1],[1,5],[1,0],[2,4],[2,4]]

    用 id() 函数再次查看内存地址

    id(a[1])==id(a[2])     #False
  • 相关阅读:
    48. 旋转图像(顺时针)
    560. 和为K的子数组
    75. 颜色分类(三指针移动||计数排序)
    670. 最大交换
    常见端口号汇总
    springboot解决跨域问题跨域
    jad使用
    tomcat9:解决tomcat catalina log和localhost log中文乱码
    JUC:阻塞队列
    JUC:读写锁
  • 原文地址:https://www.cnblogs.com/MoKinLi/p/15965489.html
Copyright © 2020-2023  润新知