可变对象与不可变对象
在python中,strings,tuples和numbers是不可更改的对象,而list,dict等则是可以修改的对象。
1、不可变类型:
变量赋值a=5后再赋值a=10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变a的值,相当于新生成了a。
2、可变类型:
变量赋值la=[1,2,3,4]后再赋值la[2]=5则是将list la的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
python 函数的参数传递:
1、不可变类型:类似c++的值传递,如整数、字符串、元组。如func(a),传递的只是a的值,没有影响a对象本身。比如在func(a)内部修改a的值,只是修改另一个复制的对象,不会影响a本身。
2、可变类型:类似c++的引用传递,如列表,字典。如func(la),则是将a真正的传过去,修改后func外部的la也会受影响。
python中一切都是对象,严格意义我们不能说是值传递还是引用传递,我们应该说传不可变对象和传可变对象。
赋值就是对物体进行贴标签操作
- **直接赋值:**其实就是对象的引用(别名)。
- **浅拷贝(copy):**拷贝父对象,不会拷贝对象的内部的子对象。
- 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
# 参考
- python 变量不可更改对象和可修改对象_星空黑夜的博客-CSDN博客_python变量不可修改 (opens new window)
- Python函数中修改变量(值传递、引用传递、可变对象、不可变对象)的深入思考_Glimmer_r的博客-CSDN博客_python 修改变量 (opens new window)
- Python彻底搞懂:变量、对象、赋值、引用、拷贝 - 知乎 (zhihu.com) (opens new window)
- [如何理解Python变量?如何查看变量的内存地址? | w3c笔记 (w3cschool.cn)](https://www.w3cschool.cn/article/17998789.html#:~:text=python语言中变量的实现方式就是引用语义,在变量里面保存的是值(对象)的引用(值所在处内存空间的地址)。,采用这种方式,变量所需的存储空间大小一致,因为其中只需要保存一个引用。 而有些语言(例如c)采用的不是这种方式,它们把变量直接保存在变量的存储区里,这种方式就称为值语义。)
- 详解Python变量在内存中的存储_lm_y的博客-CSDN博客_python变量在内存中的存储 (opens new window)
- Python对象内存地址_兔子不咬手指的博客-CSDN博客_python 地址 (opens new window)
- python变量与内存_永远的麦田的博客-CSDN博客_python变量占用内存 (opens new window)
- Python 直接赋值、浅拷贝和深度拷贝解析 | 菜鸟教程 (runoob.com) (opens new window)
上次更新: 2022/08/11, 03:44:08