我试图为自己澄清Python的“赋值”规则 到变量。在
是Python与C++有效的比较吗?在
在Python中,语句a=7
意味着,首先创建一个值为7的无名称整数对象(=
右侧的数量)并存储在内存中的某个地方。然后名称a
被绑定到这个对象。
C++产生了不同的内存位置,{{CD2>}和^ {< CD8}}
而a
和{
C++代码
#include<iostream>
using namespace std;
int main(void)
{
int a = 7;
int b = a;
cout << &a << " " << &b << endl; // a and b point to different locations in memory
return 0;
}
输出:0x7ffff843ecb8 0x7ffff843ecbc
Python:代码
^{pr2}$输出:23093448 23093448
在“示例代码”中,“int”是C++中的内置类型,因此运算符“=”不能重载,但“=”并不总是创建新对象,也可以引用相同的对象。python对象模块有点像Java,大多数对象是引用而不是副本。在
你也可以试试这个:
它输出相同的结果,因为python会发现a和b都指向同一个常量变量
是的,你基本上是对的。在Python中,变量名可以被看作是对值的引用(而不是C++引用,尽管它类似地工作,更确切地说它指的是某事物)。在
在Python中指定变量名会使名称引用不同的值,它从不复制值本身:
(我说的是“创建”,但不一定是这样——如果某个值已经存在于某个地方,它可能会重复使用它)。在
在类C语言中,第二个语句}来引用相同的值。在
b = a
创建一个新的值,将“7”复制到其中,然后命名b
。在Python中,它只是以a
和{当底层数据是不可变的(不能更改)时,这通常会使Python看起来与C的行为方式完全相同。在
<>但是,对于易变的EME>数据(与C++中的指针或C++中的指针相同),人们有时会感到惊讶,因为他们没有意识到它背后的值可以共享: ^{pr2}$有几种方法可以获得一个值的独立副本,例如:
(它将工作到一个级别,其中} ,如果完全唯一,则使用^{} ,以满足任何级别的需要。在
b = a
工作到零级别),或者如果您想使用^{相关问题 更多 >
编程相关推荐