python赋值中⽂变量_Python变量引⽤赋值
不,你不能。正如其他答案所指出的,你可以(ab?)使⽤可变对象的别名来实现类似的效果。然⽽,这与C++引⽤不⼀样,我想解释⼀下实际上发⽣了什么,以避免任何误解。<>你可以看到,在C++(和其他语⾔)中,变量(和对象字段,以及集合中的条⽬等)是⼀个存储位置,并且你可以将⼀个值(例如,⼀个整数、⼀个对象或⼀个指针)写⼊那个位置。在这个模型中,引⽤是存储位置(任何类型)的别名—当您分配给⾮引⽤变量时,您将⼀个值(即使它只是⼀个指针,它仍然是⼀个值)复制到存储位置;当您分配给引⽤时,您将复制到其他位置的存储位置。注意,你不能改变⼀个引⽤本⾝——⼀旦它被绑定(⽽且⼀旦你创建了它就必须如此),对它的所有赋值都不会改变引⽤,⽽是改变被引⽤的内容。
在Python(和其他语⾔)中,变量(和对象字段,以及集合中的条⽬等)只是⼀个名称。值是某处EME>其他(例如,堆堆上到处都是喷出),变量引⽤(不是C++引⽤的意义,更像指针减去指针算术)到值。多个名称可以引⽤同⼀个值(这通常是件好事)。Python(和其他语⾔)调⽤引⽤引⽤值所需的任何内容,尽管与C++引⽤和传递引⽤⽆关。赋值给变量(或对象字段,或…)只会使它引⽤另⼀个值。整个存储位置模型不适⽤于Python,程序员从不为值处理存储位置。他所存储的和随机处理的都是Python引⽤,⽽这些不是Python中的值,因此它们不能成为其他Python引⽤的⽬标。
所有这些都与值的可变性⽆关——例如,对于int和list也是⼀样的。不能接受引⽤其中⼀个的变量,并覆盖它所指向的对象。您只能告诉对象修改其⾃⾝的部分,例如,更改它包含的某些引⽤。
这是⼀种更严格的模式吗?也许吧,但它在⼤多数时候都⾜够强⼤。如果不是这样的话,您可以使⽤下⾯给出的⾃定义类,或者(等效的,但不太明显的)单个元素集合来解决它。class Reference:
def __init__(self, val):
self._value = val # just refers to val, no copy
def get(self):
return self._value
def set(self, val):python单例模式
self._value = val
这仍然不允许您将“常规”变量或对象字段别名为,但是您可以有多个变量引⽤同⼀个Reference对象(对于可变的单例集合替代项也是如此)。你只要⼩⼼使⽤.get()/.set()(或者[0])。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论