python-浅拷贝与深拷贝


# coding:utf-8
'''
类型                      列表、字典                                   数字、字符串
浅拷贝copy()             拷贝父对象,不会拷贝对象内部的子对象              等同于赋值运算
深拷贝deepcopy()          完全拷贝父对象及其子对象                        等同于赋值操作
'''
#1、浅拷贝,以字典为例,定义字典dict_1,元素包含另外一个字典,即子对象,对dict_1应用copy() 函数,代码如下:
import  copy

dict_1 = {
    'course':'python',
    'name':{
        'web':['django']
    }
}


'''
#浅拷贝
dict_2 = copy.copy(dict_1)

#修改父对象dict_2,为dict_2 添加一个元素,并打印dict_1和dict_2对应的内存地址,代码如下:
dict_2['db'] = 'mysql'

#打印父对象内存地址
print('dict_1:',dict_1,id(dict_1))
print('dict_2:',dict_2,id(dict_2))

#修改子对象
'''
#对dict_1 应用copy()函数之后,修改字典dict_2的子对象,为dict_2的name增加一个值,
#并打印dict_1 和dict_2的子对象name的内存地址,代码如下:
'''
print('修改子对象')
dict_2['name']['web'].append('flask')

#打印子对象内存地址
print("dict_1['name']:",dict_1,id(dict_1['name']))
print("dict_2['name']:",dict_2,id(dict_2['name']))

'''

print('深拷贝')
dict_2 = copy.deepcopy(dict_1)

#修改父对象
dict_2['db'] = 'mysql'

#打印父对象内存地址
print('dict_1:',dict_1,id(dict_1))
print('dict_2:',dict_2,id(dict_2))

print('-'*60)
#修改子对象
dict_2['name']['web'].append('flask')

#打印子对象内存地址
print("dict_1['name']:",dict_1,id(dict_1['name']))
print("dict_2['name']:",dict_2,id(dict_2['name']))


#数字和字符串
#对数字类型分别应用赋值(=),浅拷贝copy()和深拷贝deepcopy(),代码如下:
a = 100
print('a:',a,id(a))

b = a
print('b:',b,id(b))



c = copy.copy(a)

print('c:',c,id(c))


d = copy.deepcopy(a)
print('d:',d,id(d))

print('!'*60)
str_1 = 'python'
print('str_1:',str_1,id(str_1))

str_2 = str_1
print('str_2:',str_2,id(str_2))

str_3 = copy.copy(str_1)
print('str_3:',str_3,id(str_3))

str_4 = copy.deepcopy(str_1)
print('str_4:',str_4,id(str_4))

'''
可以看出,对数字和字符串类型应用赋值,浅拷贝、深拷贝是没有区别的,他们的对象引用指向同一个内存地址。
所以深拷贝浅拷贝对于数字和字符串类型是无意义的。
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值