zoukankan      html  css  js  c++  java
  • python--深浅拷贝理解

    # 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
    # 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象
    #list2=list1 -->这个不叫拷贝

    list1 =[1,2,[11,22,33],{"a":1,"b":2}]
    list2=list1.copy()
    print(id(list1[0]),id(list1[1]),id(list1[2]),id(list1[3]))
    print(id(list2[0]),id(list2[1]),id(list2[2]),id(list2[3]))
    print(id(list1))
    print(id(list2))
    list1[0]=11
    list1[1]=22
    list1[2][0]=44
    list1[3]["a"]=3
    print(list1)
    print(list2)
    print(id(list1[0]),id(list1[1]),id(list1[2]),id(list1[3]))
    print(id(list2[0]),id(list2[1]),id(list2[2]),id(list2[3]))
    /usr/local/bin/python3.8 "/Users/futantan/PycharmProjects/S14/day 7 /copy.py"
    4475763344 4475763376 4479800448 4478424320
    4475763344 4475763376 4479800448 4478424320
    4479802816
    4479799616
    [11, 22, [44, 22, 33], {'a': 3, 'b': 2}]
    [1, 2, [44, 22, 33], {'a': 3, 'b': 2}]
    4475763664 4475764016 4479800448 4478424320
    4475763344 4475763376 4479800448 4478424320
    
    Process finished with exit code 0
    #如上所看,改变了list 中的可变类型(int float等,list1 list1变成了修改后的,list2不变)
    #改变了list1 的不可变类型,则id 不变(内存地址不变)值发生了改变,列表和字典本身没有发生改变

    #可变可不变类型
    #可变类型:值改变,id不变,
    #不可变类型,值改变,id也改变了,证明是产生了新的值,压根没有改变原址,证明原值是不可以被改变的。

    # 2验证
    # int 是不可变类型
    # x=10
    # print (id(x))
    # x=11
    # print (id(x))

    #2.2 float 也是不可变
    # x=10.1
    # print (id(x))
    # x=11.2
    # print (id(x))

    # #2.2 str 也是不可变
    # x="abc"
    # print (id(x))
    # x="ert"
    # print (id(x))
    """小结:int float str 都是被设计成不可分割的整体,不能被改变"""

    深拷贝
    import copy
    list1 =[1,2,[11,22,33],{"a":1,"b":2}]
    list3=copy.deepcopy(list1)
    print(list1)
    print(list3)
    print(id(list1[0]),id(list1[1]),id(list1[2]),id(list1[3]))
    print(id(list3[0]),id(list3[1]),id(list3[2]),id(list3[3]))
    list1[0]=11
    list1[1]=22
    list1[2][0]=44
    list1[3]["a"]=3
    print(list1)
    print(list3)
    print(id(list1[0]),id(list1[1]),id(list1[2]),id(list1[3]))
    print(id(list3[0]),id(list3[1]),id(list3[2]),id(list3[3]))
    /usr/local/bin/python3.8 "/Users/futantan/PycharmProjects/S14/day 7 /深浅拷贝.py"
    [1, 2, [11, 22, 33], {'a': 1, 'b': 2}]
    [1, 2, [11, 22, 33], {'a': 1, 'b': 2}]
    4478016144 4478016176 4482064448 4480681216
    4478016144 4478016176 4482058112 4480729472
    [11, 22, [44, 22, 33], {'a': 3, 'b': 2}]
    [1, 2, [11, 22, 33], {'a': 1, 'b': 2}]
    4478016464 4478016816 4482064448 4480681216
    4478016144 4478016176 4482058112 4480729472
    
    Process finished with exit code 0
    
  • 相关阅读:
    js页面跳转(转载)
    insert into select union 插入数据到sqlserver中会自动排列
    一段没用的代码
    gridview中自动生成的列不可以设置只读
    Treeview 简单遍历,赋值,检查 checkbox
    线程操作一个无限循环,cpu 占用 25% 左右
    相对路径,绝对路径互转
    遍历虚拟网站下所有目录
    一个级联关系的表,向上获取各个字段名的函数
    大家用.net 大部分的工作是在干什么
  • 原文地址:https://www.cnblogs.com/clairedandan/p/14094504.html
Copyright © 2011-2022 走看看