首页 >后端开发 >Python教程 >Python 的赋值传递如何影响可变和不可变类型?

Python 的赋值传递如何影响可变和不可变类型?

Susan Sarandon
Susan Sarandon原创
2025-01-01 02:49:10354浏览

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