【发布时间】:2017-08-12 00:06:36
【问题描述】:
您好,我想了解 Python 的引用传递是如何工作的。 我有一个例子:
>>>a = 1
>>>b = 1
>>>id(a);id(b)
140522779858088
140522779858088
这很有意义,因为 a 和 b 都引用了相同的值,它们将具有标识。我不太明白这个例子是怎么回事:
>>>a = 4.4
>>>b = 1.0+3.4
>>>id(a);id(b)
140522778796184
140522778796136
与本例不同:
>>>a = 2
>>>b = 2 + 0
>>>id(a);id(b)
140522779858064
140522779858064
是不是因为在第三个示例中,0 int 对象被解释器视为“无”,并且没有被识别为需要与变量“a”引用的对象不同的身份(2)?而在第二个示例中,“b”添加了两个不同的 int 对象,而解释器正在为要添加的这两个对象分配内存,这给变量“a”提供了与变量“b”不同的标识?
【问题讨论】:
-
很好的问题,将尝试回答,但您需要了解完全 Python 专用的概念。
-
@Adirio 刚刚意识到我说的是“内存地址”而不是身份,我进行了调整。目前正在从 C++ 过渡。
-
这与 Python 存储小整数的方式有关,以节省内存。您可能对this article 感兴趣。
-
脉冲“通过引用传递”将我指向那个方向(从 C++ 过渡),但我理解你的问题。我试着在下面用简单的方式回答。
-
Python interning 上已有 329 个帖子!请找出规范的副本。
标签: python literals python-internals