隐藏的Python变量

2024-04-20 15:02:50 发布

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

  1. 如果说所有Python变量都是指向指向某个数据对象(比如int或list)的指针(用C表示),那么这样说是否正确?e、 g.a=5是把对象int(5)的地址放入a中,其中a有自己的地址,这是无用的(我认为)。

  2. 而print是在Python中定义的,用于打印a中存储的地址所指向的对象的内容。

  3. 在Python中定义id以打印存储在a中的地址。

这真的是引擎盖下发生的事吗?你知道吗


Tags: 数据对象id内容定义地址listint
2条回答

看看这个非常古老但仍然相关的问题Are python variables pointers? or else what are they? 它也在一个好的讨论here中被引用。你知道吗

是的,你可以把哈佛或者冯·诺依曼体系结构中的变量看作“指针”,因为对象在内存中有一个地址。你所用的词因编码语言等不同而有所不同,但很快讨论就变成了一大堆相互矛盾的观点,因为它太开放了。你知道吗

我也是一个C程序员,当我开始使用Python时,我试图用C来转换我的所有代码,但这不起作用,因为Python将您从寻址中抽象出来。你知道吗

一个很好的例子:如果在Python中声明两个对象,并且它们都具有相同的值和类型,那么它们可能具有相同的内存地址(我认为使用id()检查)。节约资源是非常有意义的。只有当两者都不同时,Python才会将一个对象转移到内存中的不同位置。在C语言中,你“不”明白这一点,因为它是一种编译语言,而不是脚本语言。如果你通过一个指针变量。。。变量有它自己的地址,然后你必须非常小心,这是C的优点和缺点

脚本语言和编译语言之间有明显的区别。不管怎样,看看链接里的问题/答案,真的很不错。你知道吗

  1. 不是真的,但很接近。Python变量是引用对象的名称。句号。Python没有定义任何关于如何实现这一点的语义。

  2. print将对象作为其参数。该对象可以通过文本(print(3)print("foo")print(True))或引用(print(a))传递。

  3. id返回在该对象的生存期内该对象唯一的整数标识符。这个整数是什么也不是由语言定义的,而是由实现来决定的。它可以很容易地成为一个序列号,从0开始,每次创建新对象时递增。

任何关于“幕后黑手”的问题都只能通过指定您使用的是哪种Python实现来回答,而这个答案对于理解Python的某个特定部分意味着什么并没有实际意义,只能理解某个特定的实现是如何实现的。你知道吗

相关问题 更多 >