zoukankan      html  css  js  c++  java
  • 浅拷贝

    1、可变对象

    所谓可变对象是指,可变对象的值可变,身份是不变的,比如:列表、字典、集合

    a = [1,2,3]
    print("a 的内存地址是:%s"%id(a))
    # a 的内存地址是:1805507242440

    b = a
    print("b 的内存地址是:%s"%id(b))
    # b 的内存地址是:1805507242440

    b.append(4)
    print("列表变化后 b的内存地址:%s"%id(b))
    #列表变化后 b的内存地址:1805507242440

    从这里我们可以看出, 当b的内容发生了变化后,他对应的内存地址并没有发生变化

    2、不可变对象

    不可变对象就是对象的身份和值都不可变。新创建的对象被关联到原来的变量名,旧对象被丢弃,垃圾回收器会在适当的时机回收这些对象,比如:数字、字符串、元组

    a = "hello"
    print("a 的内存地址是:%s"%id(a))
    # a 的内存地址是:2417528259448
    b = a
    print("b 的内存地址是:%s"%id(b))
    # b 的内存地址是:2417528259448
    b = "world"
    print("列表变化后 b的内存地址:%s"%id(b))
    # 列表变化后 b的内存地址:2417558204856

    从这里可以看出,当b的内容发生了变化时,他对应的内存地址发生了变化,重新分配了一个内存地址

    3、浅拷贝

    a = [["hello", "world"],2,3]
    print("a 的内存地址是:%s"%id(a))

    b = a.copy()
    print("b 的内存地址是:%s"%id(b))

    b拷贝a的内容后,打印a和b的内存地址

    a 的内存地址是:2111083692920
    b 的内存地址是:2111083692920

    **可以看出他们的内存地址是一样的

    修改列表中的不可变对象

    a = [["hello", "world"],2,3]
    print("a 的内存地址是:%s"%id(a))
    b = a.copy()
    # 修改a中的不可变元素 2变成test
    a[1] = "test"
    print(a)
    print("修改a中的不可变元素, b的内存地址是:%s"%id(b))
    print("修改a中的不可变元素, a的内存地址是:%s"%id(a))

    **

    a 的内存地址是:2719293548296
    [['hello', 'world'], 'test', 3]
    修改a中的不可变元素, b的内存地址是:2719293573896
    修改a中的不可变元素, a的内存地址是:2719293548296

    修改列表中的可变对象

    #修改a中的可变元素["hello", "world"]中的"hello"="new_hello"
    a = [["hello", "world"],2,3]
    print("a 的内存地址是:%s"%id(a))
    b = a.copy()
    a[0][0] = "new_hello"
    print(a)
    print("修改a中的可变元素, b的内存地址是:%s"%id(b))
    print("修改a中的可变元素, a的内存地址是:%s"%id(a))

    **

    a 的内存地址是:1884588016136
    [['new_hello', 'world'], 2, 3]
    修改a中的可变元素, b的内存地址是:1884588018504
    修改a中的可变元素, a的内存地址是:1884588016136

    从上面的数据可以看出

    修改a中的不可变对象,a和b的内存地址都没有发生变化

    修改a中的可变对象,a的内存地址没有发生变化,b的内存地址发生了变化

    浅拷贝只能拷贝可变对象中的第一层数据,当第二层数据发生了变化时,如:["hello", "world"] 身份就会发生变化

    
    
    
    
    
    
    
    
    
    
    
  • 相关阅读:
    Snagit文字提取捕获技巧
    Snagit长截图或完整截图技巧
    Snagit基于图像模板预制图片布局
    Snagit从图片创建视频的技巧
    截图工具Snagit试用免费激活方法
    Camtasia快捷键大全
    Axure RP快捷键指令汇总
    113资讯网:安装程序进入Admin后台出现:SQLSTATE[HY000] [1045] Access denied for user'root'@'localhost' (using password: YES)
    部署LNMP环境——Yum安装(113资讯网)
    会过日子是什么样
  • 原文地址:https://www.cnblogs.com/jinbaobao/p/11868288.html
Copyright © 2011-2022 走看看