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