deepcopy的时候会将复杂对象的每一层复制一个单独的个体出来 。当然其中主要的操作还是地址问题 。
当一个引用传递给函数的时候,函数自动复制一份引用,这个函数里的引用和外边的引用没有半毛关系了.所以第一个例子里函数把引用指向了一个不可变对象,当函数返回的时候,外面的引用没半毛感觉.而第二个例子就不一样了,函数内的引用指向的是可变对象,对它的操作就和定位了指针地址一样,在内存里进行修改.
引用计数
PyObject是每个对象必有的内容 , 其中ob_refcnt就是做为引用计数 。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少.引用计数为0时 , 该对象生命就结束了 。
优点:
缺点:
Python中函数调用是传值还是传引用python不允许程序员选择采用传值还是传引用 。Python参数传递采用python函数传递引用的肯定是“传对象引用”的方式 。这种方式相当于传值和传引用的一种综合 。如果函数收到的是一个可变对象(比如字典或者列表)的引用python函数传递引用,就能修改对象的原始值--相当于通过“传引用”来传递对象 。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象 。
python中变量的引用、可变和不可变类型、局部变量和全局变量变量的引用
变量和数据都是保存在内存中的
变量和数据是分开存储的
数据保存在内存中某个位置 , 通过地址来标记
变量保存的是数据的地址,通过地址可以找到数据在内存空间的位置
把变量保存数据地址的过程称为引用
变量的重新赋值修改的是变量中引用数据的内存地址
变量之间的赋值实际是引用的传递
函数参数的传递 , 本质也是引用的传递
函数的返回值本身也是引用的传递
可变和不可变类型
不可变类型,内存中的数据不允许被修改:数字类型(int,bool,float,complex,long(2,x)、字符串、元组(tuple)
可变类型,内存中的数据可以被修改:列表list、字典dict
无论是可变还是不可变数据类型 , 通过赋值语句,都会改变变量的引用
Hash函数只能接收不可变数据类型,字典的键也只能是不可变数据类型,字典的value值可以是任意数据类型
局部变量
1.在函数内部定义的变量就是局部变量(作用范围只能是当前函数内部)
2.在函数外部无法直接访问局部变量
3.不同的函数中可以定义同名的局部变量
4.局部变量的生命周期:从定义变量时开始,到函数运行结束
全局变量
1.在所有函数外边定义的变量就是全局变量
2.让所有函数都能访问到,可以作为函数通信的桥梁
3.一般情况下,为了和普通变量的区别 , 需要加上g_或gl_前缀
4.全局变量一般放在所有函数的最上面
5.在函数内部修改全局变量,必须要加上global关键字 , 如果不加global只是定义了一个同名的局部变量
函数的多个返回值
【python函数传递引用 python 引用传递】python函数传递引用的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python 引用传递、python函数传递引用的信息别忘了在本站进行查找喔 。
推荐阅读
- 鸿蒙os怎么在状态栏通知栏,鸿蒙状态栏和通知栏
- html53d衣服展示,3d衣服图片素材
- 关于jqueryinnhtml的信息
- c语言排序函数从大到小6 c语言由小到大排序函数调用
- 游戏强国战略,游戏强国排名
- 射击游戏投石机,投石机射程
- mysql怎么定义外键 mysql定义外键语法
- 电脑刷屏效果怎么关闭,电脑自动刷屏关闭文件夹
- 包含html5音频播放事件的词条