Python对象传递揭秘: immutable与mutable的区别
159 浏览量
更新于2024-08-29
收藏 80KB PDF 举报
在Python的世界里,"参数传递"这个概念常常被称为"黑魔法",因为它的行为有时可能让人感到困惑。Python中的对象概念深入人心,一切都可以视为对象,包括数字、字符串、函数甚至类。"万物皆对象"这一说法体现在`class A: pass`创建的`A()`实例,以及`def Func(): pass`定义的函数都是对象。
Python中的参数传递主要有两种方式:传值(call by value)和传引用(call by reference)。然而,Python的实际行为并非那么简单,它实际上是一种混合模式,主要取决于对象的类型。对于不可变对象(如整数、浮点数、布尔值和元组),Python采用的是"隐式传值",实际上是传递对象的值(一个不可变的副本),即使修改这些对象的副本,原对象保持不变。例如:
```python
a = 3
b = a
b = 3 + 1 # 虽然看似改变了b,但a仍然是3,因为整数加法返回新对象
```
当我们尝试改变元组的元素,如`a = (1, 2, 3)`,会抛出`TypeError`,因为元组是不可变的。
另一方面,可变对象(如列表、字典、集合和大部分自定义类的实例)则是通过引用传递。这意味着对这些对象的修改会影响到原始变量,因为它们的内部状态可以被改变:
```python
a = []
b = a
b.append(1) # a也被改变了,因为它是可变的列表
```
Python中,基本数据类型的+运算符实际上返回的是新对象,而不是改变原对象,这可以通过`id()`函数验证,它会返回对象的唯一标识:
```python
a = 3
b = a + 1
print(id(a), id(b)) # 输出不同的id,表明a和b指向的是不同对象
```
总结来说,Python中的参数传递并不是简单地按值或引用,而是根据对象的可变性来决定。理解这一点有助于我们更深入地掌握Python的动态特性,避免在实际编程中遇到意外的副作用。通过区分 immutable 和 mutable 对象,程序员能够更好地控制代码的行为和性能。
2022-08-03 上传
2024-10-01 上传
2024-11-14 上传
点击了解资源详情
2018-12-30 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38553791
- 粉丝: 3
- 资源: 915
最新资源
- 全国江河水系图层shp文件包下载
- 点云二值化测试数据集的详细解读
- JDiskCat:跨平台开源磁盘目录工具
- 加密FS模块:实现动态文件加密的Node.js包
- 宠物小精灵记忆配对游戏:强化你的命名记忆
- React入门教程:创建React应用与脚本使用指南
- Linux和Unix文件标记解决方案:贝岭的matlab代码
- Unity射击游戏UI套件:支持C#与多种屏幕布局
- MapboxGL Draw自定义模式:高效切割多边形方法
- C语言课程设计:计算机程序编辑语言的应用与优势
- 吴恩达课程手写实现Python优化器和网络模型
- PFT_2019项目:ft_printf测试器的新版测试规范
- MySQL数据库备份Shell脚本使用指南
- Ohbug扩展实现屏幕录像功能
- Ember CLI 插件:ember-cli-i18n-lazy-lookup 实现高效国际化
- Wireshark网络调试工具:中文支持的网口发包与分析