【Python基础避坑】函数内存底层分析,全局变量/局部变量,参数传递,浅拷贝/深拷贝
生活随笔
收集整理的這篇文章主要介紹了
【Python基础避坑】函数内存底层分析,全局变量/局部变量,参数传递,浅拷贝/深拷贝
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
老高說,基本功不扎實會在工作中遇到很多的坑,非常同意…
函數定義示例
1.含有返回值
# -*-coding:utf-8-*- def add(a, b):'''兩數相加'''sum = a + breturn sum c = add(1, 2)print c2.不含有返回值
# -*-coding:utf-8-*- def add(a, b):'''兩數相加'''sum = a + bprint sumreturnadd(1, 2)3.返回一個列表
# -*-coding:utf-8-*- def add(a, b):'''兩數相加'''sum = a + bprint sumreturn [sum, a, b]res = add(1, 2) print res # 輸出:[3, 1, 2]要點
1.我們使用def來定義函數,python執行def時,會創建一個函數對象,并綁定到函數名變量上。
2.如果打印函數的type,結果是<class 'function'>
3.括號是調用符(call)
內存說明
函數也是對象,內存底層分析
python函數被調用的時候,在棧空間中,會創建棧幀,保存局部變量的值。函數調用結束后,棧幀被銷毀。
局部變量與全局變量的保存位置不同。不能再函數中直接調用函數外面聲明的變量。
如果要在函數內改變全局變量的值,需要增加global關鍵字聲明
變量的作用域–全局變量和局部變量
# -*-coding:utf-8-*- c = 100def add(a, b):global cc = 200returnadd(1, 2) print c # 輸出:200局部變量和全局變量效率測試
參數的傳遞
傳遞不可變對象的引用
注意:以int為例,Java在傳參的時候就會創建一個新的對象,而python在傳參的時候傳遞的還是原來的對象的引用,只有在賦值的時候才會進行新對象的創建。
淺拷貝和深拷貝
(1)淺拷貝示例
內存分析
(2)深拷貝示例
內存分析
總結
以上是生活随笔為你收集整理的【Python基础避坑】函数内存底层分析,全局变量/局部变量,参数传递,浅拷贝/深拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python Flask】使用Ajax
- 下一篇: 【Eviews】第九周实验-二次/对数拟