有没有办法在python中分配引用?
例如,在php中我可以这样做:
$a = 10;
$b = &$a;
$a = 20;
echo $a." ".$b; // 20, 20
我怎样才能在python中做同样的事情?
答案 0 :(得分:12)
在python中,如果您使用非基本类型执行此操作,它的行为与您想要的完全相同:使用引用完成分配。这就是为什么,当你运行以下内容时:
>>> a = {'key' : 'value'}
>>> b = a
>>> b['key'] = 'new-value'
>>> print a['key']
你得到'new-value'
。
严格说,如果你这样做:
>>> a = 5
>>> b = a
>>> print id(a) == id(b)
你会变成现实。
但是!由于原始类型是不可变的,因此您无法更改变量b
本身的值。您只能根据b
创建一个具有新值的新变量。例如,如果您执行以下操作:
>>> print id(b)
>>> b = b + 1
>>> print id(b)
你会得到两个不同的价值观。
这意味着Python创建了一个新变量,根据b的值计算其值,然后将这个新变量命名为b
。这涉及所有不可变类型。将前两个示例连接在一起:
>>> a = 5
>>> b = a
>>> print id(a)==id(b)
True
>>> b += 1
>>> print id(b)==id(a)
False
因此,当您在Python中分配时,您总是分配引用。但是有些类型无法更改,因此当您进行一些更改时,实际上是使用另一个引用创建一个新变量。
答案 1 :(得分:2)
在Python中,默认情况下一切都是引用。所以,当你做类似的事情时:
x=[1,2,3]
y=x
x[1]=-1
print y
打印[1,-1,3]。
当你做
时这不起作用的原因x=1
y=x
x=-1
print y
是int
是不可变的。它们无法改变。想一想,一个数字真的会改变吗?当您为x
分配新值时,您分配新值 - 不更改旧值。所以你仍然指向旧的。其他不可变类型(例如字符串和元组)的行为方式相同。