• python 深浅拷贝


     1 # -*- coding: utf-8 -*-
     2 # @author: Tele
     3 # @Time  : 2019/04/18 下午 3:53
     4 # 深拷贝与浅拷贝
     5 import copy
     6 
     7 # 浅拷贝只拷贝一层(对于内部元素只是拷贝引用),创建新的对象
     8 a = [1, 2, 11]
     9 b = copy.copy(a)
    10 print(id(a) == id(b))  # False,b指向了新的对象
    11 
    12 c = [a]
    13 d = copy.copy(c)
    14 print(id(c) == id(d))  # False
    15 a.append("asdad")
    16 print(c[0] == d[0])  # True,说明内部的a拷贝时只拷贝了a的引用
    17 print(c[0])  # [1, 2, 11, 'asdad']
    18 print(d[0])  # [1, 2, 11, 'asdad']
    19 
    20 print("*" * 30)
    21 
    22 # 深拷贝完整的拷贝变量及其指向的对象
    23 b = copy.deepcopy(a)
    24 print(id(a) == id(b))  # False,b指向了新的对象
    25 
    26 c = [a]
    27 d = copy.deepcopy(c)
    28 print(id(c) == id(d))  # False
    29 a.append("asdad")
    30 print(c[0] == d[0])  # False
    31 print(c[0])  # [1, 2, 11, 'asdad', 'asdad']
    32 print(d[0])  # [1, 2, 11, 'asdad']
    33 
    34 # 对于不可变类型,copy与deepcopy都只是拷贝引用,不创建新的对象
    35 t = (1, 23, 5)
    36 c = copy.copy(t)
    37 print(id(c) == id(t))  # True
    38 
    39 d = copy.deepcopy(t)
    40 print(id(d) == id(t) == id(c))  # True
    41 
    42 # 对于不可变类型对象内部的元素,同样遵循上面的规则
    43 a = ["asd", 123, 123]
    44 t = (a, 1, 34)
    45 c = copy.copy(t)
    46 d = copy.deepcopy(t)
    47 a.append("xx")
    48 print(c[0] == t[0])  # True,对于元组内部的列表a拷贝引用
    49 print(d[0] == t[0])  # False
  • 相关阅读:
    DataSingleton单例
    iOS平台XML解析类库对比和安装说明
    ASIHTTPRequest类库简介和使用说明
    IOS开发之格式化日期时间
    iOS多线程编程之NSThread的使用
    Django的Xadmin后台集成富文本Ueditor
    Django DEBUG=False后静态文件加载失败
    Python多进程
    linux平台虚拟环境依赖安装
    SQLite基础使用
  • 原文地址:https://www.cnblogs.com/tele-share/p/10730277.html
Copyright © 2020-2023  润新知