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

     1  #0 1 2 3 4 5 6 7 8 9 10 11
     2    li = [1,1,2,2,3,3,4,5,6,7,8,9]
     3 #循环一次 #[1,2,2,3,3,4,5,6,7,8,9]
     4            #0 1 2 3 4 5 6 7 8 9 10
     5 for i in li:
     6     if i%2!=0:
     7         li.remove(i)
     8 print(li)
     9 # 运行结果:[1, 2, 2, 3, 4, 6, 8]
    10 
    11 #循环删除list的时候,都会出现这样的问题
    12 #循环的时候,不要删除元素,下标会错乱
    13 
    14 #解决办法
    15 li = [1,1,2,2,3,3,4,5,6,7,8,9]
    16 # l2 = li
    17 l2 = li[:]
    18 print(id(li)) #查看内存地址
    19 print(id(l2))
    20 # l2 = [1,1,2,2,3,3,4,5,6,7,8,9]
    21 for i in l2:
    22     if i%2!=0:
    23         li.remove(i)
    24 print(li)
    25 # 运行结果:[2, 2, 4, 6, 8]  正确的
    26 
    27 #深拷贝   不同的内存地址 不相互影响
    28 li = [1,1,2,2,3,3,4,5,6,7,8,9]
    29 l2 = li[:]
    30 #浅拷贝   指向相同的内存地址 相互影响
    31 li = [1,1,2,2,3,3,4,5,6,7,8,9]
    32 l2 = li
    33 
    34 #深拷贝和浅拷贝的区别,浅拷贝不会开辟新的内存地址,深拷贝会开辟新的内存地址
    35 
    36 import copy
    37 d = {'name':'bai','age':28}
    38 #d1 = d  #浅拷贝
    39 d1=copy.deepcopy(d) #深拷贝
    40 d1['age']=12
    41 
    42 print(id(d))
    43 print(id(d1))
    44 print(d)
    45 print(d1)
    46 运行结果:2962609174280
    47 2962610675072
    48 {'name': 'bai', 'age': 28}
    49 {'name': 'bai', 'age': 12}
    50 
    51 ====================================================================
    52 
    53 import copy
    54 d = {'name':'bai','age':[3,4,5]}
    55 #d1 = d  #浅拷贝
    56 d1=copy.copy(d)  #还是浅拷贝  在深入一层的时候就是浅拷贝了
    57 d1['age'].append(19)
    58 print(id(d))
    59 print(id(d1))
    60 print(d)
    61 print(d1)
    62 
    63 运行结果:1839810967304
    64                   1839810967376
    65 {'name': 'bai', 'age': [3, 4, 5, 19]}
    66 {'name': 'bai', 'age': [3, 4, 5, 19]}
  • 相关阅读:
    nginx能访问html静态文件但无法访问php文件
    LeetCode "498. Diagonal Traverse"
    LeetCode "Teemo Attacking"
    LeetCode "501. Find Mode in Binary Search Tree"
    LeetCode "483. Smallest Good Base" !!
    LeetCode "467. Unique Substrings in Wraparound String" !!
    LeetCode "437. Path Sum III"
    LeetCode "454. 4Sum II"
    LeetCode "445. Add Two Numbers II"
    LeetCode "486. Predict the Winner" !!
  • 原文地址:https://www.cnblogs.com/baiby/p/10775922.html
Copyright © 2011-2022 走看看