Python开发--在python中,有着深拷贝和浅拷贝,即copy模块

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

下面我们就来聊一下:

运行效果:


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

代码部分:

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

#python copy
'''
个人认为:
    浅拷贝:拷贝后,对象的引用没有发生变化,而对象的行为发生变化,会反映到拷贝后的对象身上
    深拷贝:拷贝后,对象的引用发生了变化,即对象不同,所以,即使对象再怎么变,也不会对其他对象产生影响
'''

import copy

def shallow_copy(s):
    '''make a shallow copy of s.'''
    return copy.copy(s)

def deep_copy(d):
    '''make a deep copy of d.'''
    return copy.deepcopy(d)

def test_shallow():
    tem_data = ['a', 'c', 'e', 't', [1, 2, 3]]
    print('被拷贝的源数据为:{}'.format(tem_data))
    s_copy = shallow_copy(tem_data)
    print('进行浅拷贝....')
    tem_data.append('Hongten')
    tem_data[4].append('4')
    print('修改源数据后:{}'.format(tem_data))
    print('拷贝后的数据为:{}'.format(s_copy))

def test_deep():
    tem_data = ['a', 'c', 'e', 't', [1, 2, 3]]
    print('被拷贝的源数据为:{}'.format(tem_data))
    s_copy = deep_copy(tem_data)
    print('进行深拷贝....')
    tem_data.append('Hongten')
    tem_data[4].append('4')
    print('修改源数据后:{}'.format(tem_data))
    print('拷贝后的数据为:{}'.format(s_copy))

def test_s_copy():
    '''listB复制了listA,这时候listB是对listA的一个引用
    他们指向的是同一个对象:[1, 2, 3, 4, 5],当我们试图修
    改listB[1] = 'Hongten'的时候,listB的所指向的对象的
    行为发生了变化,即元素的值发生了变化,但是他们的引用是没
    有变化的,所以listA[1] = 'Hongten'也是情理之中的事'''
    listA = [1, 2, 3, 4, 5]
    listB = listA
    listB[1] = 'Hongten'
    print('listA = {}, listB = {}'.format(listA, listB))

def test_clone():
    '''进行了列表的克隆操作,即拷贝了另一个列表,这样的操作,
    会创造出新的一个列表对象,使得listA和listB指向不同的对象,
    就有着不同的引用,所以当listB[1] = 'Hongten'的时候,
    listA[1]还是等于2,即不变'''
    listA = [1, 2, 3, 4, 5]
    listB = listA[:]
    listB[1] = 'Hongten'
    print('listA = {}, listB = {}'.format(listA, listB))

def main():
    print('浅拷贝Demo')
    test_shallow()
    print('#' * 50)
    print('深拷贝Demo')
    test_deep()
    print('#' * 50)
    test_s_copy()
    print('#' * 50)
    test_clone()

if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值