• 菜鸟python---深浅拷贝


    深浅拷贝
    1.以后尽量避免
    2.面试必问

    赋值, =
    浅拷贝
    深拷贝

    a = [1,2,3,4]
    b = a
    print(id(a),id(b))
    print(a is b)

    a.append(5)
    print(b)

    a = [1,2,3,4]
    b = a
    #
    a.append([1,2,3])
    print(b)

    copy -- 拷贝
    a = [1,2,3,4,5]
    b = a.copy()
    print(id(a[0]))
    print(id(b[0]))

    a = [1,2,3,[4,5]]
    b = a[:] # 浅拷贝
    print(id(a[-1][0]))
    print(id(b[-1][0]))
    a.append(9) # 010101
    print(a)
    print(b) # 010111




    a = [1,2,3,[4,5]]
    b = a[:] # 浅拷贝
    a[-1].append(6)
    print(b)

    a = [1,2,3,[4,5,6,[9,10]],67]
    b = a # 赋值
    b = a[:]
    a[-2].append(10)
    a[-2][-1].append(10)
    print(b)

    a = [1,2,3,[4,5,6,[9,10]],67]
    b = a[:]
    b[-1] = 7
    print(a)
    print(b)

    a = [1,2,3,[4,5,6,[9,10]],67]
    b = a[:]
    b[-2][-1].append(11)
    print(a)
    print(b)

    a = [1,2,[10,7,8],4]
    b = a[:]
    b[-2] = 90
    print(a)
    print(b)

    浅拷贝:只拷贝第一层元素的地址,只有修改第一层的时候源数据不受影响,
    给可变数据类型进行添加的时候源数据会受影响
    = 是修改 .append是添加

    深拷贝:
    import copy # 导入 copy模块
    a = [1,2,3,[4,5],6]
    b = copy.deepcopy(a)
    print(id(a[-2]))
    print(id(b[-2]))


    print(a)
    print(b)
    print(a == b)
    print(id(a),id(b))
    print(a is b)


    赋值: 将多个变量指向一个同一个内存地址就是赋值

    浅拷贝: 只拷贝第一层元素的地址,只有修改拷贝的数据第一层的时候源数据不受影响,
    给可变数据类型进行添加的时候源数据会受影响
    = 是修改 .append是添加 可变数据类型能够修改和添加,不可变数据类型只能修改

    深拷贝: 不可变数据类型内存地址共用,可变数据类型新开辟一个空间
  • 相关阅读:
    守护进程、互斥锁、生产者消费者模型
    实现并发编程的基础理论
    udp协议
    进程与进程池
    tcp协议产生-粘包问题的解决方案
    day21面向对象_类
    day16_面向过程编程与模块导入
    day15_函数递归_匿名函数_内置函数
    三、运算符(阶段二)
    二、(续)基础语法--常量、变量和注释(阶段二)
  • 原文地址:https://www.cnblogs.com/veryFuelong/p/13357007.html
Copyright © 2020-2023  润新知