摘要:作者本文原載于,不允許轉載的參數傳遞的參數傳遞,無法控制引用傳遞還是值傳遞。對于不可變對象數字字符元組等的參數,更類似值傳遞對于可變對象列表字典等,更類似引用傳遞。
作者:LogM
本文原載于 https://segmentfault.com/u/logm/articles ,不允許轉載~
1. Python 的參數傳遞Python的參數傳遞,無法控制引用傳遞還是值傳遞。對于不可變對象(數字、字符、元組等)的參數,更類似值傳遞;對于可變對象(列表、字典等),更類似引用傳遞。
def fun1(n): print(n) # n在沒修改前,指向的地址和main函數中n指向的地址相同 n = 20 # n在修改后,指向的地址發生改變,相當于新建了一個值為20的參數n def fun2(l): print(l) # l在沒修改前,指向的地址和main函數中l指向的地址相同 l = [5,6,7,8,9] # l在修改后,指向的地址和main函數中l指向的地址仍相同,此時main函數中l的值也會改變 if __name__=="__main__": n = 10 l = [1,2,3,4,5] fun1(n) fun2(l) print(n) # n的值還是10 print(l) # l的值在fun2()中已經被改變2. Python 的返回值
Python的返回值,無法控制引用傳遞還是值傳遞。對于不可變對象(數字、字符、元組等)的參數,更類似值傳遞;對于可變對象(列表、字典等),更類似引用傳遞。
str1 = "hi" l1 = [1,2,3,4,5] def fun1(): return str1 def fun2(): return l1 str2 = fun1() # 此時,str1 和 str2 的指向地址是相同的 str2 = "hello" # 修改后,str2 指向的地址發生改變,相當于新建了一個值為`hello`的變量 l2 = fun2() # 此時,l1 和 l2 的指向地址是相同的 l2 = [6,7,8,9] # 修改后,l2 指向的地址仍相同,修改 l2 會影響到 l13. Python 的淺拷貝和深拷貝
對于不可變對象(數字、字符、元組等),直接賦值的結果和深拷貝一致;對于可變對象(列表、字典等),直接賦值、淺拷貝、深拷貝結果不同。
# 不可變對象(數字、字符、元組等)的例子 a = 100 b = a b = 30 print("a: ", a) print("b: ", b) # 結果: # a = 100 # b = 30
# 可變對象(列表、字典等)的例子 import copy dict1 = {1:1, "user":"test", "num":[1, 2, 3]} dict2 = dict1 # 直接賦值,兩個字典指向地址一致 dict3 = dict1.copy() # 淺拷貝,只拷貝到原對象 dict4 = copy.deepcopy(dict1) # 深拷貝,除了拷貝原對象,也會拷貝子對象 dict1[1] = 11 dict1["user"] = "123" dict1["num"].remove(1) print("原字典修改后:",dict1) print("直接賦值:",dict2) print("淺拷貝:",dict3) print("深拷貝:",dict4) # 結果 # 原字典修改后:{1:11,"user": "123", "num": [2, 3]} # 直接賦值:{1:11,"user": "123", "num": [2, 3]} # 淺拷貝:{1:1,"user": "test", "num": [2, 3]} # 深拷貝:{1:1,"user": "test", "num": [1, 2, 3]}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44130.html
摘要:對于而言,情況可能會有點小復雜,因為一切皆為對象,所以的普通賦值深拷貝和淺拷貝之間都是有細微區別的。二下的他們在中,對象的賦值和傳遞都是引用。 一、深拷貝與淺拷貝 ??深拷貝:賦值時值完全復制,完全的copy,對其中一個作出改變,不會影響另一個 ??淺拷貝:賦值時,引用賦值,相當于取了一個別名。對其中一個修改,會影響另一個 ??對于PHP而言,= 賦值時,普通對象是深拷貝,但對對象來說...
摘要:對于而言,情況可能會有點小復雜,因為一切皆為對象,所以的普通賦值深拷貝和淺拷貝之間都是有細微區別的。二下的他們在中,對象的賦值和傳遞都是引用。 一、深拷貝與淺拷貝 ??深拷貝:賦值時值完全復制,完全的copy,對其中一個作出改變,不會影響另一個 ??淺拷貝:賦值時,引用賦值,相當于取了一個別名。對其中一個修改,會影響另一個 ??對于PHP而言,= 賦值時,普通對象是深拷貝,但對對象來說...
摘要:之前關于的作用域賦值參數傳遞,我們接連談了幾篇文章全菊變量和菊部變量關于函數參數傳遞,人都錯了可變對象與不可變對象今天我們依然要就相關話題繼續下去。這是由于它們是不可變對象,不存在被修改的可能,所以拷貝和賦值是一樣的。 之前關于 Python 的作用域、賦值、參數傳遞,我們接連談了幾篇文章: 全菊變量和菊部變量 關于函數參數傳遞,80%人都錯了 可變對象與不可變對象 今天我們依然要...
摘要:從存儲的字符串表示中檢索原始對象的過程稱為。這稱為命名空間。如果需要八進制或十六進制表示,請使用內置函數或。和有什么區別返回對象,而返回列表,并使用相同的內存,無論范圍大小是多少。它提供了靈活性,并允許開發人員為他們的項目使用正確的工具。 ...
摘要:變量聲明與賦值值傳遞淺拷貝與深拷貝詳解歸納于筆者的現代開發語法基礎與實踐技巧系列文章。變量聲明在中,基本的變量聲明可以用方式允許省略,直接對未聲明的變量賦值。按值傳遞中函數的形參是被調用時所傳實參的副本。 ES6 變量聲明與賦值:值傳遞、淺拷貝與深拷貝詳解歸納于筆者的現代 JavaScript 開發:語法基礎與實踐技巧系列文章。本文首先介紹 ES6 中常用的三種變量聲明方式,然后討論了...
閱讀 2909·2021-11-17 09:33
閱讀 1630·2021-10-12 10:13
閱讀 2425·2021-09-22 15:48
閱讀 2313·2019-08-29 17:19
閱讀 2587·2019-08-26 11:50
閱讀 1565·2019-08-26 10:37
閱讀 1732·2019-08-23 16:54
閱讀 2917·2019-08-23 14:14