zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    JVM—Java内存结构
    myeclipse中页面utf-8的设置
    Python-统计txt文件里面的分数
    Python-字符串常用函数
    初识C#扩展方法
    Artwork 18年中南多校第一场A
    HDU2586 How far away ?
    HDU5952 Counting Cliques 暴搜优化
    POJ 2763 Housewife Wind 树链拋分
    HDU 3966 Aragorn's Story 树链拋分
  • 原文地址:https://www.cnblogs.com/tele-share/p/10730277.html
Copyright © 2011-2022 走看看