在 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中文網其他相關文章!