Python赋值和函数传值的方式

注:今天在Leetcode上刷题,用python写递归函数是在是被传值的问题绕晕了,因此决定好好查找资料,进行一番总结~~~

1、赋值

    首先,我们需要明白在Python中一切都是以对象的形式存在的,变量只是存储指向对象的地址。关系如下图所示:

赋值“=”是将右侧对象在内存中的存储地址赋值给左侧的变量

2、浅拷贝(copy)和深拷贝(deepcopy)

 赋值只是指向同一个对象的内存地址。

浅拷贝copy会将对象的第一层拷贝一份到新的内存地址中,而深拷贝deepcopy是完全复制原变量的所有层的的所有数据,在内存中为其生成一套完全相同的内容存储。举例如下:

import copy
dict = {'a':[1,2,3,4],'b':2}
dd = copy.deepcopy(dict)
print(dd)
ee = copy.copy(dict)
print(ee)
dd['a'][0] = 7
print(dd)
print(dict)
ee['a'][0] = 7
print(ee)
print(dict)

print(id(dict))
print(id(dd))
print(id(ee))
print(id(dd['a']))
print(id(ee['a']))
print(id(dict['a']))
{'a':[1,2,3,4],'b':2}
{'a':[1,2,3,4],'b':2}
{'a':[7,2,3,4],'b':2}
{'a':[1,2,3,4],'b':2}
{'a':[7,2,3,4],'b':2}
{'a':[7,2,3,4],'b':2}
20109472
20244496
20495072
20272112
20221511
20221511

3、值传递还是引用传递

Python参数传递统一使用的都是引用传递,只是由于变量类型中有可变对象和不可变对象产生了差异。其中List,Dict,Set是可变对象,传递后可以被修改;而number,string,tuple是不可变对象,传递之后不能被修改,一旦被修改就会给变量赋值一个新的存储地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值