• Python 中的浅拷贝和深拷贝


    1. 列表和字典,直接赋值,都是浅拷贝,即赋值双方指向同一地址,因为 Python 对可变对象按引用传递。

    >>> a = [1, 2, 3]
    >>> b = a
    >>> b
    [1, 2, 3]
    >>> a[0] = 'apple'
    >>> a
    ['apple', 2, 3]
    >>> b
    ['apple', 2, 3]
    >>> 
    >>> 
    >>> dic = {'a': 'apple', 'b': 'banbana'}
    >>> dic2 = dic
    >>> dic2
    {'a': 'apple', 'b': 'banbana'}
    >>> dic['b'] = 'blueberry'
    >>> dic
    {'a': 'apple', 'b': 'blueberry'}
    >>> dic2
    {'a': 'apple', 'b': 'blueberry'}

    2. 对非嵌套的列表,使用完全切片[:], 工厂函数 list(),或者 copy.copy() 都是深拷贝。

    >>> a = [1, 2, 3]
    >>> b = list(a)
    >>> c = a[:]
    >>> import copy
    >>> d = copy.copy(a)
    >>> 
    >>> a[0] = 'apple'
    >>> a
    ['apple', 2, 3]
    >>> b
    [1, 2, 3]
    >>> c
    [1, 2, 3]
    >>> d
    [1, 2, 3]

    3. 对于非嵌套的字典,使用工厂函数 dict(),或者 copy.copy() 都是深拷贝。

    >>> dic = {'a': 'apple', 'b': 'banana'}
    >>> dic2 = dict(dic)
    >>> import copy
    >>> dic3 = copy.copy(dic)
    >>> 
    >>> dic['b'] = 'blueberry'
    >>> dic
    {'a': 'apple', 'b': 'blueberry'}
    >>> dic2
    {'a': 'apple', 'b': 'banana'}
    >>> dic3
    {'a': 'apple', 'b': 'banana'}

    4. 对于嵌套的列表,嵌套的字典,只能使用 copy.deepcopy() 实现深拷贝。

    >>> import copy
    >>> 
    >>> a = [1, 2, ['apple']]
    >>> b = copy.deepcopy(a)
    >>> a[2][0] = 'watermelon'
    >>> a
    [1, 2, ['watermelon']]
    >>> b
    [1, 2, ['apple']]
    >>> 
    >>> 
    >>> dic = {'a': 'apple', 'b': {'b1': 'banana', 'b2': 'blueberry'}}
    >>> dic2 = copy.deepcopy(dic)
    >>> dic['b']['b1'] = 'bukeneng'
    >>> dic
    {'a': 'apple', 'b': {'b1': 'bukeneng', 'b2': 'blueberry'}}
    >>> dic2
    {'a': 'apple', 'b': {'b1': 'banana', 'b2': 'blueberry'}}

    5. 对于嵌套可变对象的元组,只有 copy.deepcopy() 实现深拷贝。

    >>> import copy
    >>>
    >>> t = (1, 2, ['apple']) >>> t2 = t >>> t3 = tuple(t) >>> t4 = copy.copy(t) >>> t5 = copy.deepcopy(t) >>> >>> t[2][0] = 'watermelon' >>> t (1, 2, ['watermelon']) >>> t2 (1, 2, ['watermelon']) >>> t3 (1, 2, ['watermelon']) >>> t4 (1, 2, ['watermelon']) >>> t5 (1, 2, ['apple'])

    完。

  • 相关阅读:
    GPT分区安装windows10详细教程
    paddle07-paddle.regularizer正则化
    paddle02-paddle.io(数据读取相关) 【完】
    【python】80行代码实现压缩包密码破解软件,支持zip和rar
    【python】B站弹幕数据分析及可视化(爬虫+数据挖掘)
    【python】10行代码下载B站弹幕
    【pytorch】使用迁移学习(resnet18)训练mnist数据集
    迁移学习在实际应用中需要注意什么?
    【python】进度条的简单实现
    【机器学习】AI去马赛克工具(图像修复)
  • 原文地址:https://www.cnblogs.com/gaowengang/p/7855941.html
Copyright © 2020-2023  润新知