python 拷贝

文章目录

说明

  • 直接赋值:

    • python直接赋值其实就是对象的引用(别名)。
    • 即:对象的赋值都是进行对象引用(内存地址)传递
    • 二者指向同一对象
  • 浅拷贝:

    • 拷贝父对象,不会拷贝对象内部的子对象。
    • 即:浅拷贝会创建一个新的对象,但是,对于对象中的元素,浅拷贝就只会使用原始元素的引用(内存地址)
    • 产生浅拷贝的效果:
      • 使用切片[:]操作
      • 使用工厂函数(如list/dir/set)
      • 使用copy模块中的copy()函数
    • 二者是一个独立的对象,但他们的子对象还是指向统一对象(是引用)
  • 深拷贝:

    • copy的deepcopy方法,完全拷贝了父对象及子对象。
    • 二者是完全独立的对象
  • 拷贝的特殊情况:

    • 对于非容器类型(如数字、字符串、和其他’原子’类型的对象)没有拷贝这一说。
    • 如果元祖变量只包含原子类型对象,则不能深拷贝。

案例

代码:

#!/usr/bin/python
# -*-coding:utf-8 -*-
 
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a                       #赋值,传对象的引用
c = copy.copy(a)            #对象拷贝,浅拷贝
d = copy.deepcopy(a)        #对象拷贝,深拷贝

a.append(5)                 #修改对象a
a[4].append('c')            #修改对象a中的['a', 'b']数组对象
 
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )

输出:


('a = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5]) # 原始
('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5]) # 赋值,引用一样
('c = ', [1, 2, 3, 4, ['a', 'b', 'c']]) #浅拷贝,只子对象一样
('d = ', [1, 2, 3, 4, ['a', 'b']]) # 深拷贝,二者完全独立
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值