了解python的名称绑定

2024-04-25 04:09:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为自己澄清Python的“赋值”规则 到变量。在

是Python与C++有效的比较吗?在

    < > > C++中的语句^ ^ }意思是,内存被分配给一个整数变量,称为^ {< CD2>}(^ { }符号的<强>左< /强>的数量) 然后值7才被存储在里面。

  1. 在Python中,语句a=7意味着,首先创建一个值为7的无名称整数对象(=右侧的数量)并存储在内存中的某个地方。然后名称a被绑定到这个对象。

<下面的C++和Python程序的输出似乎证明了这一点,但我想知道我是否正确。在

C++产生了不同的内存位置,{{CD2>}和^ {< CD8}} 而a和{}在Python中似乎指的是同一个位置 (通过id()函数的输出)

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


Tags: 对象内存代码名称id数量规则地方
2条回答

在“示例代码”中,“int”是C++中的内置类型,因此运算符“=”不能重载,但“=”并不总是创建新对象,也可以引用相同的对象。python对象模块有点像Java,大多数对象是引用而不是副本。在

你也可以试试这个:

a = 7
b = 7
print id(a), ' ' , id(b) 

它输出相同的结果,因为python会发现a和b都指向同一个常量变量

是的,你基本上是对的。在Python中,变量名可以被看作是对值的引用(而不是C++引用,尽管它类似地工作,更确切地说它指的是某事物)。在

As an aside, the Python way is very similar to the C++ int &b = a, which just means a and b refer to the same value.

Or the C int *pb = &a, which means a and *pb refer to the same value, but with all the confusion that brings to people who haven't yet accepted the brain-bendedness of C :-)

在Python中指定变量名会使名称引用不同的值,它从不复制值本身:

a = 7   # Create "7", make "a" refer to it.
b = a   # make "b" refer to  the "7" as well.
a = 42  # Create "42", make "a" refer to it, b still refers to the "7".

(我说的是“创建”,但不一定是这样——如果某个值已经存在于某个地方,它可能会重复使用它)。在

在类C语言中,第二个语句b = a创建一个新的值,将“7”复制到其中,然后命名b。在Python中,它只是以a和{}来引用相同的值。在

当底层数据是不可变的(不能更改)时,这通常会使Python看起来与C的行为方式完全相同。在

<>但是,对于易变的EME>数据(与C++中的指针或C++中的指针相同),人们有时会感到惊讶,因为他们没有意识到它背后的值可以共享:

^{pr2}$

有几种方法可以获得一个值的独立副本,例如:

b = a[:]
b = [item for item in a]

(它将工作到一个级别,其中b = a工作到零级别),或者如果您想使用^{},如果完全唯一,则使用^{},以满足任何级别的需要。在

相关问题 更多 >