zoukankan      html  css  js  c++  java
  • 深浅copy

    id(object) 获取对象的内存地址

    is 判断是否是同一个内存空间  == 判断值是否相同

    a = [1,2,3,]
    b = a[:]         # 相当于是浅copy,b指向了一个新的内存空间,但新内存空间中保存的内存地址还是指向了数组[1,2,3,]
    c = a            # c和a指向了同一块内存空间
    print(a is b)    # False
    print(a is c)    # True
    print(a==b)      # True

    同一代码块下的缓存机制、不同代码块下的小数据池(字符串、bool、数值)

    1.赋值,指向同一块内存空间

    a={'n':1}
    b=a                  # a和b不是独立的对象
    print(id(a), id(b))  # 2470858078792 2470858078792
    a={'n':2}
    print(id(a), id(b))  # 2470858079672 2470858078792

    2.浅copy(当里面有可变数据类型时会导致混乱,对不可变数据类型没影响)

    会开辟一个新的内存空间,但是存储的都是数据的内存地址,这些内存地址都指向同一块内存空间。(当有可变数据类型时,也就是会指向可变数据类型的内存地址)

    a = [1, 2, 3, 4, [1, 2, 3]]
    b = a.copy()  # a[:]   
    a.append(5)
    print(a)  # [1, 2, 3, 4, [1, 2, 3], 5]
    print(b)  # [1, 2, 3, 4, [1, 2, 3]]
    a[4].append(4)
    print(a)  # [1, 2, 3, 4, [1, 2, 3, 4], 5]
    print(b)  # [1, 2, 3, 4, [1, 2, 3, 4]]
    print(id(a[0]),id(a[4]))  # 140728064385424 3202058800968   和下面的深copy进行对比
    print(id(b[0]),id(b[4]))  # 140728064385424 3202058800968

    3.深copy(互相不影响)

    可变的数据类型重新创建一份;不可变的数据类型公用,与之前内存地址指向的内存空间相同

    from copy import deepcopy
    
    a = [1, 2, 3, 4, [1, 2, 3]]
    b = deepcopy(a)
    a.append(5)
    print(a)  # [1, 2, 3, 4, [1, 2, 3], 5]
    print(b)  # [1, 2, 3, 4, [1, 2, 3]]
    a[4].append(4)
    print(a)  # [1, 2, 3, 4, [1, 2, 3, 4], 5]
    print(b)  # [1, 2, 3, 4, [1, 2, 3]]
    print(id(a[0]),id(a[4]))  # 140728064385424 3202056259720
    print(id(b[0]),id(b[4]))  # 140728064385424 3202058801096
  • 相关阅读:
    在注册表中添加windows鼠标右键菜单
    关于MVC中无法将类型为“System.Int32”的对象强制转换为类型“System.String”的问题。
    dns
    ntp
    研究比对搞定博客 canvas-nest.js
    linux 添加ssh和开启ssh服务apt管理的ubuntu
    xshll 连接ubuntu出现 ssh服务器拒绝了密码
    yum和rpm
    服务器无法远程连接原因分析
    关于服务器卡顿的几个原因
  • 原文地址:https://www.cnblogs.com/pineapple-chicken/p/13235015.html
Copyright © 2011-2022 走看看