zoukankan      html  css  js  c++  java
  • 深拷贝浅拷贝

    1.应用copy库:

     1 import copy
     2 
     3 #当  变量 = xxxx 时 可以理解为变量指向xxxx所在的地址
     4 a = [11,22]
     5 b = [33,44]
     6 c = [a,b]
     7 x = (a,b)
     8 
     9 d = c  # d 和 c 同时指向
    10 print("---指向---")
    11 print(id(c))  # 3037957585544
    12 print(id(d))  # 3037957585544
    13 
    14 # 浅拷贝 只拷贝最外层的数据 内部指向地址不变  但是 如果拷贝的对象是元祖 无论元祖里面的值是否可变 都是引用 而不拷贝 即id()结果相同
    15 e = copy.copy(c)
    16 print("---浅拷贝1---")
    17 print(id(c))  # 3037957585544
    18 print(id(e))  # 3037957181064
    19 print(id(c[0]))  # 3037957586248
    20 print(id(e[0]))  # 3037957586248
    21 
    22 # 浅拷贝遇元祖 变指向
    23 e2 = copy.copy(x)
    24 print("---浅拷贝遇元祖---")
    25 print(id(x))  # 3037957178696
    26 print(id(e2))  # 3037957178696
    27 print(id(x[0]))  # 3037957586248
    28 print(id(e2[0]))  # 3037957586248
    29 
    30 # 深拷贝 把数据完全拷贝出来放在新地址 包括内部指向地址的值
    31 f = copy.deepcopy(c)
    32 print("---深拷贝---")
    33 print(id(c))  # 3037957585544
    34 print(id(f))  # 3037957586312
    35 print(id(c[0]))  # 3037957586248
    36 print(id(f[0]))  # 3037957586888
    37 
    38 # 深拷贝遇元祖1:如果元祖里面的值是可变的 则依然是深拷贝 递归全拷
    39 f2 = copy.deepcopy(x)
    40 print("---深拷贝遇元祖1---")
    41 print(id(x))  # 3037957178696
    42 print(id(f2))  # 3037926301768
    43 print(id(x[0]))  # 3037957586248
    44 print(id(f2[0]))  # 3037957586504
    45 # 深拷贝遇元祖2:如果元祖里面的值都是不可变 则变指向
    46 a3 = (11,22)
    47 b3 = (33,44)
    48 c3 = (a3,b3)
    49 f3 = copy.deepcopy(c3)
    50 print("---深拷贝遇元祖2---")
    51 print(id(c3))  # 3037957178824
    52 print(id(f3))  # 3037957178824
    53 print(id(c3[0]))  # 3037957179592
    54 print(id(f3[0]))  # 3037957179592

     2.切片是浅拷贝:

    1 a = [11,22]
    2 b = [33,44]
    3 c = [a,b]
    4 d = c[:]
    5 print("---切片---")
    6 print(id(c))  # 2801867735752
    7 print(id(d))  # 2801867735624
    8 print(id(c[0]))  # 2801867705608
    9 print(id(d[0]))  # 2801867705608

    3.字典的copy()方法是浅拷贝:

    1 d = dict(name="zhangsan",age=27,children_age=[11, 22])
    2 e = d.copy()
    3 d["children_age"].append(9)
    4 print(d)  # {'name': 'zhangsan', 'children_age': [11, 22, 9], 'age': 27}
    5 print(e)  # {'name': 'zhangsan', 'age': 27, 'children_age': [11, 22, 9]}
  • 相关阅读:
    SVM高斯核为何会将特征映射到无穷维?【转载】
    sklearn.svm.LinearSVC文档学习
    NgDL:第四周深层神经网络
    Py中的矩阵乘法【转载】
    NN中BP推导及w不能初始化为0
    L2-006 树的遍历
    P3144 关闭农场 并查集 反向
    P1197 [JSOI2008]星球大战 并查集 反向
    P2700 逐个击破 最小生成树
    L2-005 集合相似度
  • 原文地址:https://www.cnblogs.com/yifengs/p/11428152.html
Copyright © 2011-2022 走看看