• python开发_copy(浅拷贝|深拷贝)_博主推荐


    python中,有着深拷贝和浅拷贝,即copy模块

    下面我们就来聊一下:

    运行效果:

    ==================================================

    代码部分:

    ==================================================

     1 #python copy
     2 '''
     3 个人认为:
     4     浅拷贝:拷贝后,对象的引用没有发生变化,而对象的行为发生变化,会反映到拷贝后的对象身上
     5     深拷贝:拷贝后,对象的引用发生了变化,即对象不同,所以,即使对象再怎么变,也不会对其他对象产生影响
     6 '''
     7 
     8 import copy
     9 
    10 def shallow_copy(s):
    11     '''make a shallow copy of s.'''
    12     return copy.copy(s)
    13 
    14 def deep_copy(d):
    15     '''make a deep copy of d.'''
    16     return copy.deepcopy(d)
    17 
    18 def test_shallow():
    19     tem_data = ['a', 'c', 'e', 't', [1, 2, 3]]
    20     print('被拷贝的源数据为:{}'.format(tem_data))
    21     s_copy = shallow_copy(tem_data)
    22     print('进行浅拷贝....')
    23     tem_data.append('Hongten')
    24     tem_data[4].append('4')
    25     print('修改源数据后:{}'.format(tem_data))
    26     print('拷贝后的数据为:{}'.format(s_copy))
    27 
    28 def test_deep():
    29     tem_data = ['a', 'c', 'e', 't', [1, 2, 3]]
    30     print('被拷贝的源数据为:{}'.format(tem_data))
    31     s_copy = deep_copy(tem_data)
    32     print('进行深拷贝....')
    33     tem_data.append('Hongten')
    34     tem_data[4].append('4')
    35     print('修改源数据后:{}'.format(tem_data))
    36     print('拷贝后的数据为:{}'.format(s_copy))
    37 
    38 def test_s_copy():
    39     '''listB复制了listA,这时候listB是对listA的一个引用
    40     他们指向的是同一个对象:[1, 2, 3, 4, 5],当我们试图修
    41     改listB[1] = 'Hongten'的时候,listB的所指向的对象的
    42     行为发生了变化,即元素的值发生了变化,但是他们的引用是没
    43     有变化的,所以listA[1] = 'Hongten'也是情理之中的事'''
    44     listA = [1, 2, 3, 4, 5]
    45     listB = listA
    46     listB[1] = 'Hongten'
    47     print('listA = {}, listB = {}'.format(listA, listB))
    48 
    49 def test_clone():
    50     '''进行了列表的克隆操作,即拷贝了另一个列表,这样的操作,
    51     会创造出新的一个列表对象,使得listA和listB指向不同的对象,
    52     就有着不同的引用,所以当listB[1] = 'Hongten'的时候,
    53     listA[1]还是等于2,即不变'''
    54     listA = [1, 2, 3, 4, 5]
    55     listB = listA[:]
    56     listB[1] = 'Hongten'
    57     print('listA = {}, listB = {}'.format(listA, listB))
    58 
    59 def main():
    60     print('浅拷贝Demo')
    61     test_shallow()
    62     print('#' * 50)
    63     print('深拷贝Demo')
    64     test_deep()
    65     print('#' * 50)
    66     test_s_copy()
    67     print('#' * 50)
    68     test_clone()
    69 
    70 if __name__ == '__main__':
    71     main()
  • 相关阅读:
    最清晰易懂的Mysql CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP区别
    yield再理解--绝对够透彻
    解决pyspider框架web预览框过小问题
    python中的可哈希与不可哈希
    python json.dumps 中的ensure_ascii 参数引起的中文编码问题
    LeetCode 297. 二叉树的序列化与反序列化 | Python
    LeetCode 1300. 转变数组后最接近目标值的数组和 | Python
    LeetCode 30. 串联所有单词的子串 | Python
    LeetCode 739. 每日温度 | Python
    LeetCode 128. 最长连续序列 | Python
  • 原文地址:https://www.cnblogs.com/hongten/p/hongten_python_copy.html
Copyright © 2020-2023  润新知