分配参考

时间:2011-01-18 13:44:12

标签: python

有没有办法在python中分配引用?

例如,在php中我可以这样做:

$a = 10;
$b = &$a;
$a = 20;

echo $a." ".$b; // 20, 20 

我怎样才能在python中做同样的事情?

2 个答案:

答案 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分配新值时,您分配新值 - 不更改旧值。所以你仍然指向旧的。其他不可变类型(例如字符串和元组)的行为方式相同。