zoukankan      html  css  js  c++  java
  • Python学习---深浅拷贝的学习

    浅拷贝copy(): 修改字符串,原来的不变; 更改列表,2个同时修改,以为列表里面还涉及一个指针的索引. 简单讲就是copy()只是简单地copy了第一层,第二层不被copy

    深拷贝:  需要单独的copy模块; import copy

    字符串的copy()

    字符串的copy(): 也是单独开辟空间,新值的更改不影响旧值

    name = ['hhh', 'ftl', 'aaa']
    name2 = name.copy()
    print('name_old:', id(name),name)
    name2[0] = 'hello'
    print('name_new:',  id(name), name)
    print('name2:', id(name2), name2)

    image

    浅拷贝copy()

    浅拷贝copy(): 修改字符串,原来的不变; 更改列表,2个同时修改,以为列表里面还涉及一个指针的索引. 简单讲就是copy()只是简单地copy了第一层引用关系,第二层不被copy

    name = [['name',  'hello', 'sex', 'male'], 'hhh', 'ftl', 'aaa']
    name3 = name.copy()
    print('name_old [原始数据] :', id(name), name)
    # 修改第二个字符串,不影响原来
    name3[2] = 'hello'
    print('name_new[更改字符后]:',  id(name), name)
    print('name3   [更改字符后]:', id(name3), name3)
    # 修改列表后, 新旧一起改变
    name3[0][1] = 'world'
    print('name_new[更改列表后]:',  id(name), name)
    print('name3   [更改列表后]:', id(name3), name3)

    image

    浅拷贝讲解:

    【图转载自】http://www.cnblogs.com/yuanchenqi/articles/5782764.html

    image

    image

    深拷贝

    深拷贝:等于克隆了一份,需要模块的单独支持

    name = ['hhh', 222, [100, 200]]
    name2 = copy.deepcopy(name)
    print(id(name), id(name2))
    print(name, name2)
    name2[2][1] = 300
    print(id(name[2][1]), id(name2[2][1]))
    print(name, name2)

    image

    其他补充

    查看内存地址:

    name = ['hhh', 'ftl', 'aaa']
    name_1 = ['hhh', 'ftl', 'aaa']
    name[0] = 'good'   # 更改name[0]的值
    print(id(name), name)
    print(id(name_1), name_1)

    注解: 字符串本身就是一个类,所以相当于开辟了2个地址空间,所以一个的改变不影响另外一个

    image

    关于整型/字符串更改前后的堆栈情况

    a = [[1, 2], 3, 4]   # a 开辟的是一个整块的内存空间
    b = a        #  给a 重命名了个名字 b
    c = a.copy() #  c独自开了个内存空间,而且是只复制一层
    print('---------------------------------- C = A.copy() ------------------------------')
    print(a, id(a), id(a[0][0]), id(a[1]))
    print(c, id(c), id(c[0][0]), id(c[1]))
    
    c[0][0] = 9
    c[1] = 8
    print(a, id(a), id(a[0][0]), id(a[1]))
    print(c, id(c), id(c[0][0]), id(c[1]))
    print('---------------------------------- A = B ---------------------------------')
    print(a, id(a), id(a[0][0]), id(a[1]))
    print(b, id(b), id(b[0][0]), id(b[1]))
    
    b[0][0] = 9
    b[1] = 8
    print(a, id(a), id(a[0][0]), id(a[1]))
    print(b, id(b), id(b[0][0]), id(b[1]))

    image

    image

  • 相关阅读:
    flask 第三方组件
    Flask基础与进阶
    odoo10 视图
    odoo10 ORM操作
    odoo10基础
    字典的setdefault方法
    redis常用操作
    git常用命令与操作
    vue_axios
    odoo 权限设置
  • 原文地址:https://www.cnblogs.com/ftl1012/p/9382019.html
Copyright © 2011-2022 走看看