首頁 > 後端開發 > Python教學 > Python 的賦值傳遞如何影響可變與不可變型別?

Python 的賦值傳遞如何影響可變與不可變型別?

Susan Sarandon
發布: 2025-01-01 02:49:10
原創
387 人瀏覽過

How Does Python's Pass-by-Assignment Impact Mutable and Immutable Types?

按引用傳遞與按值傳遞

在 Python 中將變數傳遞給函數時,參數總是透過賦值傳遞。這意味著函數中的參數是對傳入物件的參考。

但是,由於Python 區分可變類型和不可變類型,因此傳遞的變數的行為有所不同:

可變類型:
對於可變類型,傳遞的參數引用傳入的同一物件。函數中對物件所做的變更是反映在外部作用域中。

不可變類型:
對於不可變型,傳遞的參數是傳入物件的副本。對物件中的物件所做的任何變更函數不會反映在外部作用域中。

範例:

考慮這個 Python類別:

class PassByReference:
    def __init__(self):
        self.variable = 'Original'
        self.change(self.variable)
        print(self.variable)

    def change(self, var):
        var = 'Changed'
登入後複製

建立此類別的實例時:

PassByReference()
登入後複製

輸出為「原始」。這是因為「change」方法中的「var」參數是外部作用域中「variable」屬性的副本。因此,在方法內修改 'var' 對原始 'variable' 沒有影響。

實現不可變類型的按引用傳遞

要實現不可變類型的按引用傳遞行為,可以採用返回新值或使用包裝器等技術:

傳回新值值:

def change_immutable(parameter):
    new_parameter = 'Changed'
    return new_parameter

result = change_immutable('Original')
登入後複製

在這種情況下,「change_immutable」函數傳回一個新值,然後將其指派給「result」變數。

使用包裝器:

class ImmutableWrapper:
    def __init__(self, value):
        self.value = value

def change_immutable_wrapper(wrapper):
    wrapper.value = 'Changed'

immutable_wrapper = ImmutableWrapper('Original')
change_immutable_wrapper(immutable_wrapper)
print(immutable_wrapper.value)  # Outputs 'Changed'
登入後複製

在這種方法中,物件包裝器用於保存不可變值。對包裝器值所做的變更會反映在外部範圍中。

以上是Python 的賦值傳遞如何影響可變與不可變型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板