python深浅拷贝原理_我要学python之深浅拷贝原理

前言

在c++中参数传递有两种形式:值传递和引用传递。这两种方式的区别我不在此说,自行补上,如果你不知道的话。我先上python代码,看完我们总结一下,代码如下:

# copy module import

import copy

# number and string

a = 12

a1 = a

a2 = copy.copy(a)

a3 = copy.deepcopy(a)

# look addr

print("==========number=======")

print(id(a))

print(id(a1))

print(id(a2))

print(id(a3))

s = '12345'

s1 = s

s2 = copy.copy(s)

s3 = copy.deepcopy(s)

# look addr

print("==========String=======")

print(id(s))

print(id(s1))

print(id(s2))

print(id(s3))

# others

target = {

'name': 'ckmike',

'age': 25,

'boxes':[

'LV',

'Prada',

'KUQI'

]

}

target1 = target

target2 = copy.copy(target)

target3 = copy.deepcopy(target)

print("==========dict-1=======")

print(id(target))

print(id(target1))

print(id(target2))

print(id(target3))

print("==========dict-2=======")

print(id(target['boxes']))

print(id(target1['boxes']))

print(id(target2['boxes']))

print(id(target3['boxes']))

输出结果:

==========number=======

10943360

10943360

10943360

10943360

==========String=======

140567123944648

140567123944648

140567123944648

140567123944648

==========dict-1=======

140567124625088

140567124625088

140567124625160

140567123938760

==========dict-2=======

140567099339272

140567099339272

140567099339272

140567099339464

总结:

对于数值、字符串而言,不管是赋值符号还是浅拷贝、深拷贝,都是引用的内存中的同一份值,变量指向同一地址。

对于非数值非字符串而言,浅拷贝只会拷贝对象的第一层,深拷贝则会把所有层都进行拷贝。

具体深浅拷贝,可以查看模块copy中的copy和deepcopy源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值