国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【編程語言】Python 的參數傳遞、返回值、淺拷貝、深拷貝

PascalXie / 2125人閱讀

摘要:作者本文原載于,不允許轉載的參數傳遞的參數傳遞,無法控制引用傳遞還是值傳遞。對于不可變對象數字字符元組等的參數,更類似值傳遞對于可變對象列表字典等,更類似引用傳遞。

作者: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 會影響到 l1
3. 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

相關文章

  • 探索php和python下對象拷貝拷貝

    摘要:對于而言,情況可能會有點小復雜,因為一切皆為對象,所以的普通賦值深拷貝和淺拷貝之間都是有細微區別的。二下的他們在中,對象的賦值和傳遞都是引用。 一、深拷貝與淺拷貝 ??深拷貝:賦值時值完全復制,完全的copy,對其中一個作出改變,不會影響另一個 ??淺拷貝:賦值時,引用賦值,相當于取了一個別名。對其中一個修改,會影響另一個 ??對于PHP而言,= 賦值時,普通對象是深拷貝,但對對象來說...

    wizChen 評論0 收藏0
  • 探索php和python下對象拷貝拷貝

    摘要:對于而言,情況可能會有點小復雜,因為一切皆為對象,所以的普通賦值深拷貝和淺拷貝之間都是有細微區別的。二下的他們在中,對象的賦值和傳遞都是引用。 一、深拷貝與淺拷貝 ??深拷貝:賦值時值完全復制,完全的copy,對其中一個作出改變,不會影響另一個 ??淺拷貝:賦值時,引用賦值,相當于取了一個別名。對其中一個修改,會影響另一個 ??對于PHP而言,= 賦值時,普通對象是深拷貝,但對對象來說...

    shinezejian 評論0 收藏0
  • python拷貝拷貝

    摘要:之前關于的作用域賦值參數傳遞,我們接連談了幾篇文章全菊變量和菊部變量關于函數參數傳遞,人都錯了可變對象與不可變對象今天我們依然要就相關話題繼續下去。這是由于它們是不可變對象,不存在被修改的可能,所以拷貝和賦值是一樣的。 之前關于 Python 的作用域、賦值、參數傳遞,我們接連談了幾篇文章: 全菊變量和菊部變量 關于函數參數傳遞,80%人都錯了 可變對象與不可變對象 今天我們依然要...

    ideaa 評論0 收藏0
  • 精選50道Python面試題,快來看看你已經掌握了多少道吧

    摘要:從存儲的字符串表示中檢索原始對象的過程稱為。這稱為命名空間。如果需要八進制或十六進制表示,請使用內置函數或。和有什么區別返回對象,而返回列表,并使用相同的內存,無論范圍大小是多少。它提供了靈活性,并允許開發人員為他們的項目使用正確的工具。 ...

    zzir 評論0 收藏0
  • ES6 變量聲明與賦傳遞拷貝拷貝詳解

    摘要:變量聲明與賦值值傳遞淺拷貝與深拷貝詳解歸納于筆者的現代開發語法基礎與實踐技巧系列文章。變量聲明在中,基本的變量聲明可以用方式允許省略,直接對未聲明的變量賦值。按值傳遞中函數的形參是被調用時所傳實參的副本。 ES6 變量聲明與賦值:值傳遞、淺拷貝與深拷貝詳解歸納于筆者的現代 JavaScript 開發:語法基礎與實踐技巧系列文章。本文首先介紹 ES6 中常用的三種變量聲明方式,然后討論了...

    snowLu 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<