Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 指定参考资料_Python - Fatal编程技术网

Python 指定参考资料

Python 指定参考资料,python,Python,有没有办法在python中分配引用 例如,在php中,我可以这样做: $a = 10; $b = &$a; $a = 20; echo $a." ".$b; // 20, 20 在python中如何执行相同的操作?在python中,如果您使用非原语类型执行此操作,它的行为与您想要的完全一样:使用引用完成赋值。这就是为什么在运行以下操作时: >>> a = {'key' : 'value'} >>> b = a >>> b['ke

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

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

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

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

在python中如何执行相同的操作?

在python中,如果您使用非原语类型执行此操作,它的行为与您想要的完全一样:使用引用完成赋值。这就是为什么在运行以下操作时:

>>> a = {'key' : 'value'}
>>> b = a
>>> b['key'] = 'new-value'
>>> print a['key']
>>> a = 5
>>> b = a
>>> print id(a) == id(b)
>>> print id(b)
>>> b = b + 1
>>> print id(b)
您将获得
“新值”
。 严格地说,如果您执行以下操作:

>>> a = {'key' : 'value'}
>>> b = a
>>> b['key'] = 'new-value'
>>> print a['key']
>>> a = 5
>>> b = a
>>> print id(a) == id(b)
>>> print id(b)
>>> b = b + 1
>>> print id(b)
你会实现的

但是由于基元类型是不可变的,因此不能更改变量
b
本身的值。您只需基于
b
创建一个具有新值的新变量即可。例如,如果您执行以下操作:

>>> a = {'key' : 'value'}
>>> b = a
>>> b['key'] = 'new-value'
>>> print a['key']
>>> a = 5
>>> b = a
>>> print id(a) == id(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中赋值时,总是赋值引用。但是有些类型是不能更改的,所以当您做一些更改时,实际上是用另一个引用创建了一个新变量。

在Python中,默认情况下所有内容都是引用。所以当你做一些类似的事情时:

x=[1,2,3]
y=x
x[1]=-1
print y
它打印[1,-1,3]

当你这样做的时候,这不起作用的原因是

x=1
y=x
x=-1
print y

就是
int
s是不可变的。它们无法改变。想想看,一个数字真的会改变吗?当您为
x
分配新值时,您正在分配新值,而不是更改旧值。所以y仍然指向旧的那个。其他不可变类型(例如字符串和元组)的行为方式相同

出于兴趣,为什么?你用它做什么?cru3l有没有问过如何编写好的程序或者如何做一些特别的事情?在Python中,这种编程风格可能不合适或不可能,但他为什么要使用引用并不重要。他在问这个问题,而这并不涉及解决他更广泛的问题。@Noctis:如果我们都只解决假定的问题,这个网站就不存在。@Noctis Skytower:“cru3l问过如何编写好的程序吗?”。是的,他们问过如何写一个好的程序。他们走错了路,走到了死胡同,请求帮助。他们需要正确的解决方案,而不是一些无用的复杂的工作,不能解决他们真正的问题谢谢你帮助我理解。这提醒我要提防那些妄自尊大的人,他们会推断出未经证实的问题并试图解决它们。在Python中具有不可变对象的对象标识。这可能不是你所期望的。嗯,很有趣。谢谢你的例子。但是在a=257之后\n b=a表达式总是给出a is b==True,对吗?python中没有基元类型。是的,我知道。我只是想,这种类似Java的术语会让事情更容易理解。使用这种类似Java的术语充其量只是让人困惑。Java程序员可能认为
1
在Python中也是一个原语。原因与int是不可变的这一事实无关。在第二个示例中,将x重新绑定到-1,y仍然绑定到1。