zoukankan      html  css  js  c++  java
  • python 零散知识点(复制、浅拷贝、深拷贝)

    要搞懂这三个概念,将下面三个程序自己测试一遍就行。

    复制

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

    140716855894416 140716855894416
    1 1

    浅拷贝

    #只拷贝一层
    jack = ["jack",['age',20]]
    tom = jack[:]    # 切片
    nick = list(jack) # 工厂方法
    print(jack,tom,nick) # 内容相同
    print(id(jack), id(tom),id(nick)) #指向不同的ID了
    
    # 年龄是一个嵌套列表,在第二层 
    # 假如只修改tom的年龄为18
    tom[0] = "tom"
    nick[0] = "nick" # 第一层单独变化
    tom[1][1] = 18
    print(jack,tom,nick)                       # 结果三个的年龄都变了,
    print(id(jack[1]), id(tom[1]),id(nick[1])) # 第二层,ID值相同,说明浅拷贝,存在嵌套的情况,是不能单独修改各自的值得
    

    ['jack', ['age', 20]] ['jack', ['age', 20]] ['jack', ['age', 20]]
    2105435611848 2105436845192 2105469646856
    ['jack', ['age', 18]] ['tom', ['age', 18]] ['nick', ['age', 18]]
    2105435527176 2105435527176 2105435527176

    深拷贝

    #  拷贝了对象的所有元素
    import copy
    jack = ["jack",['age',20]]
    tom  =  copy.deepcopy(jack)
    nick  = copy.deepcopy(jack)
    tom[0] = "tom"
    nick[0] = "nick"    # 第一层单独变化
    tom[1][1] = 18      # 第二层也单独变化
    print(jack,tom ,nick )  
    

    ['jack', ['age', 20]] ['tom', ['age', 18]] ['nick', ['age', 20]]

  • 相关阅读:
    23种设计模式(转载)
    RabbitMQ JAVA客户端调用
    JavaScript中的this
    RedisDesktopManager 踩坑之旅
    webmagic使用手册
    Maven 手动添加本地jar包
    根据端口号查询 进程 并杀掉进程
    从经典面试题看java中类的加载机制
    Java线程的5种状态及切换(透彻讲解)
    JVM 类加载机制详解
  • 原文地址:https://www.cnblogs.com/sinlearn/p/13060936.html
Copyright © 2011-2022 走看看