python 参数传递 传值还是传引用
2024-09-30 20:48:44
个人推测结论:
可变对象传引用,不可变对象传值
python里的变量不同于c中地址储值模型
a=100
b=100
print(id(a),id(b),a==b,a is b) #8790877986944 8790877986944 True True
这两个变量id相同,值相等,如果 a=a+1,a的id也变了 浮点数也是这样
看成和str tuple一样的不可变对象,实际操作可以改变,但都是副本操作
暂且管它叫不可变对象的副本操作
def f(x):
x+=100
return x
a=100
f(a) #直接传变量 变量传值
print(a) # 100
def fn(data):
for i in range(len(data)):
data[i]+=1
l = [3,5,7]
fn(l) #直接传改变原对象 list传引用
print(l) #[4, 6, 8]
#以下是传副本方式 不改变原对象
l2 = [1,2,3]
fn(l2.copy())
print(l2) #[1, 2, 3]
fn(l2[:])
print(l2) #[1, 2, 3]
#str 不可变对象是传值
s = "do you like me!"
def str_answer(s):
s=s+" No way!"
print(s)
str_answer(s)
print(s)
print(s.upper()) #return a copy
print(s)
最新文章
- vue-cli 组件的使用
- android Android-PullToRefresh 下拉刷新
- PHP 错误与异常 笔记与总结(3)PHP 配置文件(php.ini)中与错误相关的选项 与 设置错误级别
- 【Todo】Java要学的一些比较好的框架和系统
- lintcode:Binary Search 二分查找
- storm-kafka教程
- 怎样调通微信支付及微信发货通知接口(Js API)
- 在开发 ExtJS 应用程序常犯的 10 个错误
- Docker学习计划
- jquery.validata.js 插件
- tarjan求强连通分量+缩点+割点以及一些证明
- Linux send和recv
- MongoDB【快速入门】
- java——形参与实参
- 小米正式开源 SQL 智能优化与改写工具 SOAR
- BZOJ4767: 两双手【组合数学+容斥原理】
- 转载:python的编码处理(一)
- RN 离线包集成后需要注意的一些问题
- MyBatis之MyBatis环境搭建
- Python递归实现汉诺塔