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

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

Susan Sarandon
Susan Sarandon原創
2025-01-01 02:49:10335瀏覽

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