在web中,python的名称有很多混淆,文档中的名称似乎也不太清楚。下面是我读到的关于python名称的一些信息。在
名称是对对象的引用(它们在哪里?堆?)名字里有一个地址。(像Java)。
int& b = a
表示{名称与C中自动取消引用的指针变量非常相似。
以上哪个陈述是正确的?在
Python名称中是否包含某种地址,或者只是一个内存位置的名称(如C++ ^ {CD5>}引用)?在
python名称存储在哪里,堆栈还是堆?在
EDIT
:
从appendix+A.+A+Selective+and+Impressionistic+Short+Review+of+Python/A.2+Namespaces+and+Bindings/#" rel="nofollow">http://etutorials.org/Programming/Python.+Text+processing/Appendix+A.+A+Selective+and+Impressionistic+Short+Review+of+Python/A.2+Namespaces+and+Bindings/#查看以下行
当一个对象本身的名字被取消引用的时候。如果名称尚未在某个可访问的范围内绑定,则无法取消对该名称的引用;尝试这样做会引发NameError异常。如果名称后面跟有左括号和右括号(可能中间有逗号分隔的表达式),则在取消引用后调用/调用对象。对于Python对象,调用时发生的事情可以控制和重写;但一般来说,调用函数或方法会运行一些代码,而调用一个类会创建一个实例。例如:
pkg.subpkg.func() # invoke a function from a namespace
x = y # deref 'y' and bind same object to 'x'
这使得理智点想交叉检查一下有多真实吗是。评论请回答
Python的名字是,嗯,名字。你有对象和名字,就这样。在
创建一个对象,比如
[3, 4, 5]
在堆的某个处创建一个对象。你不需要知道怎么做。现在,您可以通过将名称指定给名称来将其指定给该对象:也就是说,赋值运算符指定名称而不是值。
^{pr2}$x
不是[3, 4, 5]
,不,它只是一个指向[3, 4, 5]
对象的名称。所以这样做:不更改原始的}都创建临时表。除非你给那个临时工指定一个名字,否则它会立即死亡。没有任何机制(例如,在CPython中,对于小数字,除此之外),没有机制来保持未被引用的对象的活动状态,并将其缓存。例如,这将失败:
[3, 4, 5]
对象,而是将对象1
指定给名称x。还请注意,大多数表达式,如[3, 4, 5]
,但{但是,这仅仅是赋值(这在Python中是不可重载的)。实际上,Python中的对象和名称的行为非常类似于自动取消引用指针,只不过它们会自动被引用计数,并且在不再被引用后会消亡(至少在CPython中),并且它们不会在赋值时自动取消引用。在
由于这种内存模型,例如,重载索引操作的C++方式不起作用。相反,Python使用
__setitem__
和__getitem__
,因为不能返回任何“可赋值”的内容。此外,运算符+=
,*=
等。。。创建临时文件并将临时文件分配回名称。在是的。如果只想理解Python变量的语义,就不必关心对象在哪里;它们在内存中的某个地方,Python实现为您管理内存。他们如何做到这一点取决于实现(CPython、Jython、PyPy…)。在
不完全是。重新分配C++中的引用实际上重新分配引用的内存位置,例如在
之后。这是真的
^{pr2}$i == 1
。在Python中不能这样做,除非使用可变容器对象。最接近C++引用行为的是不,因为它们在上述方面类似于C++参考文献。在
前者更接近于事实,假设一个简单的实现(同样,PyPy可能做的事情与CPython不同)。在任何情况下,Python变量不是存储位置,而是可能存在于内存中任何位置的对象的标签/名称。在
Python进程中的每个对象都有一个标识,可以使用
id
函数获得,该函数在CPython中返回其内存地址。您可以检查两个变量(或更一般的表达式)是否引用同一个对象,方法是检查它们的id
,或者更直接地使用is
:Python对象是stored on a heap,通过reference counting进行垃圾回收。在
变量是对Java中的对象的引用,因此第1点适用。我不熟悉C中的C++或自动撤销指针变量,以便调用这些变量。在
最终,由python解释器来查找解释器结构中的项,这些解释器结构通常是python列表、字典和其他类似的抽象容器;名称空间使用
dict
(哈希表),其中名称和值是指向其他python对象的指针。它们由mapping protocol显式管理。在对于python程序员来说,这一切都是隐藏的;您不需要知道您的对象在哪里,只要您有引用它们的东西,它们仍然是活动的。在用python编写代码时,可以传递这些引用。在
相关问题 更多 >
编程相关推荐