python---函数补充(变量传递),语句执行顺序(入栈顺序)
一:函数补充
默认作为函数参数的数据,是浅拷贝传递。不是和C等语言一样,产生一个临时变量。
class T: def __init__(self,num): print(id(num)) self.num = num print(id(self.num)) def printf(self): num = self.num print(id(num)) #数据没有被改变过,所以这里的所有相关num变量都是指向同一个内存空间 if __name__ == "__main__": num = 10 print(id(num)) t = T(num) t.printf()
1385649216 1385649216 1385649216 1385649216
由输出结果可以知道,这些变量引用的都是同一个内存空间的值。属于浅拷贝。只有当我们在函数中去修改该变量的时候,才会重新去生成一个局部变量内存空间去存放数据,当函数执行后,数据被回收。
def func(num): print(id(num),num) num = 13 #修改数据,分配新的局部变量空间,函数退出,被回收 print(id(num),num) if __name__ == "__main__": n = 12 print(id(n),n) func(n) print(id(n),n) print("end")
1385649280 12 1385649280 12 1385649312 13 #此时被修改了数据,内存中为这个局部变量重新分配了空间,修改不影响原来的数据 1385649280 12 end
注意:当列表,字典等类型传入函数体后,修改不会改变内存地址,同样传递对象的结果一样,修改后不会改变内存地址
>>> class T: ... pass ... >>> t = T >>> t = T() >>> t <__main__.T object at 0x0000000001091588> >>> t.id = 6 >>> t <__main__.T object at 0x0000000001091588> >>> t.age = "daf" >>> t <__main__.T object at 0x0000000001091588>
二:语句中的入栈顺序
同其他语言(C,C++等)一样入栈顺序是右端先进行执行后入栈(python3.5中),在python2.7之前的入栈顺序是左端先
Python2.7:
Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on wi
n32
Type "help", "copyright", "credits" or "license" for more information.
>>> ls = [1,2,3]
>>> print ls,ls.reverse() #print先入栈执行,然后reverse再入栈执行
[1, 2, 3] None
>>> print ls
[3, 2, 1]
Python3.5:
Python 3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)]
on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> li = [4,3]
>>> print(li,li.reverse()) #右端先入栈执行reverse,再输出li,li.reverse()的结果None
[3, 4] None
>>> print(li)
[3, 4]
作者:山上有风景
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· .NET Core GC压缩(compact_phase)底层原理浅谈
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 深度学习基础理论————CV中常用Backbone(Resnet/Unet/Vit系列/多模态系列等