Python 如何处理不可变对象作为参数?

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


一、什么是不可变对象?

Python 中常见的 不可变对象 包括:

int
float
bool
str
tuple
frozenset

这些对象一旦创建,就不能被修改。

🔁 二、不可变对象作为函数参数的行为

当不可变对象作为参数传入函数时,函数内部对该参数的“修改”不会影响外部变量,因为:

函数内部操作的是原始值的副本(实际上是重新绑定变量名到新对象)。

✅ 示例 1:整数作为参数​​​​​​​

def change_number(x):
    print("函数内修改前 x:", x, id(x))
    x += 10
    print("函数内修改后 x:", x, id(x))
a = 5
print("调用前 a:", a, id(a))
change_number(a)
print("调用后 a:", a, id(a))

输出:

调用前 a: 5 140735682296864

函数内修改前 x: 5 140735682296864

函数内修改后 x: 15 140735682297216

调用后 a: 5 140735682296864

📌 说明:

x += 10 实际是创建了一个新的整数对象 15。

外部变量 a 的值没有变化。

✅ 示例 2:字符串作为参数​​​​​​​

def modify_string(s):
    s += " World"
    print("函数内的 s:", s)
text = "Hello"
modify_string(text)
print("函数外的 text:", text)

输出:

函数内的 s: Hello World

函数外的 text: Hello

📌 说明:

字符串是不可变的,s += " World" 创建了新的字符串对象。

外部变量 text 没有被修改。

✅ 示例 3:元组作为参数(虽然是容器,但内容不可变)​​​​​​​

def modify_tuple(t):
    # t[0] = 99   # ❌ 报错!不能修改元组中的元素
    t = (99, 100)  # 可以重新赋值给局部变量 t
    print("函数内的 t:", t)
tpl = (1, 2, 3)
modify_tuple(tpl)
print("函数外的 tpl:", tpl)

输出:

函数内的 t: (99, 100)

函数外的 tpl: (1, 2, 3)

📌 说明:

元组本身是不可变的,不能修改其中的元素。

函数内对 t 的赋值只是改变了局部变量指向的对象。‍

📌 三、总结:不可变对象作为参数的特点

图片

🧩 四、对比:可变对象 vs 不可变对象

图片

💡 五、实际应用建议

函数设计原则:

如果不希望函数修改外部变量,使用不可变对象作为参数。

如果需要修改外部数据结构,使用可变对象(如列表或字典)。

避免副作用:

避免在函数内部意外修改外部状态,使用不可变对象可以增强代码安全性。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值