Python中的整数是按值或引用传递的吗?

阿杰

我编写了以下代码,以检查是否通过值或引用传递了整数。

foo = 1

def f(bar):
    print id(foo) == id(bar)
    bar += 1
    print foo, bar

f(foo)

我得到的输出是

True
1, 2

从Python文档中,id(object)返回对象的标识。CPython实现中,这是对象在内存中的地址。由于函数主体中的第一个语句返回True,这意味着foo已通过引用传递,但是为什么打印最后一条语句1, 2而不是2, 2

尼科

围绕这个“问题”似乎有很多困惑。实际上Python中的变量名称都是对对象的引用。分配给变量名实际上并没有更改对象本身,而是将引用设置为新对象。因此,在您的情况下:

foo = 1 #

def test(bar):
    # At this point, "bar" points to the same object as foo.
    bar = 2    # We're updating the name "bar" to point an object "int(2)".
    # 'foo' still points to its original object, "int(1)".
    print foo, bar # Therefore we're showing two different things.

test(foo)

Python语法类似于C的方式以及许多事物都是语法糖的事实可能令人困惑。记住整数对象在本质上是不可变的,似乎很奇怪,这foo += 1可能是一个有效的声明。实际上,foo += 1实际上等效于foo = foo + 1,两者都转换为foo = foo.__add__(1),实际上返回一个新对象,如下所示:

>>> a = 1
>>> id (a)
18613048
>>> a += 1
>>> id(a)
18613024
>>>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python:在递归提取中可以接受“按引用传递”吗?

来自分类Dev

SystemVerilog数组是按值或引用传递的吗?

来自分类Dev

SystemVerilog数组是按值或引用传递的吗?

来自分类Dev

Python中的整数是通过值还是引用传递?

来自分类常见问题

python pandas dataframe,是按值传递还是按引用传递

来自分类Dev

Python,Java,C:按引用传递或按值传递

来自分类Dev

在Javascript中按值传递和按引用传递

来自分类Dev

在Android Adapter中按值传递和按引用传递?

来自分类Dev

在C ++线程中,我应该按值或引用传递shared_ptr吗?

来自分类Dev

在C ++线程中,我应该按值或引用传递shared_ptr吗?

来自分类Dev

在python中通过引用传递整数

来自分类Dev

在C ++中按值传递指针吗?

来自分类Dev

整数变量按值传递,字符串变量按引用传递?

来自分类Dev

C ++中的函数重载按值或按引用传递参数

来自分类Dev

在.NET中,是按值或按引用传递的类对象

来自分类Dev

按值或引用传递容器

来自分类Dev

有人可以解释一下C#中的“按值传递”和“按引用传递”是什么意思吗?

来自分类Dev

python递归通过引用还是按值传递?

来自分类Dev

const引用何时比C ++ 11中的按值传递更好?

来自分类Dev

js中的函数按值或引用复制/传递

来自分类Dev

在重载函数中按引用传递对象或按值传递对象

来自分类Dev

对在C#中按引用传递和按值传递感到困惑

来自分类Dev

在C#中,我应该按值传递参数并返回相同的变量,还是按引用传递?

来自分类Dev

我是否正确理解C中的按值传递和按引用传递?

来自分类Dev

C ++中按引用传递和按值传递之间过载歧义的可行解决方案

来自分类Dev

分片是按值传递的吗?

来自分类Dev

Qt并发运行,按引用传递值,但是内存地址不同吗?

来自分类Dev

Objective-C是按值传递还是按引用传递?

来自分类Dev

C#按值传递与按引用传递

Related 相关文章

  1. 1

    Python:在递归提取中可以接受“按引用传递”吗?

  2. 2

    SystemVerilog数组是按值或引用传递的吗?

  3. 3

    SystemVerilog数组是按值或引用传递的吗?

  4. 4

    Python中的整数是通过值还是引用传递?

  5. 5

    python pandas dataframe,是按值传递还是按引用传递

  6. 6

    Python,Java,C:按引用传递或按值传递

  7. 7

    在Javascript中按值传递和按引用传递

  8. 8

    在Android Adapter中按值传递和按引用传递?

  9. 9

    在C ++线程中,我应该按值或引用传递shared_ptr吗?

  10. 10

    在C ++线程中,我应该按值或引用传递shared_ptr吗?

  11. 11

    在python中通过引用传递整数

  12. 12

    在C ++中按值传递指针吗?

  13. 13

    整数变量按值传递,字符串变量按引用传递?

  14. 14

    C ++中的函数重载按值或按引用传递参数

  15. 15

    在.NET中,是按值或按引用传递的类对象

  16. 16

    按值或引用传递容器

  17. 17

    有人可以解释一下C#中的“按值传递”和“按引用传递”是什么意思吗?

  18. 18

    python递归通过引用还是按值传递?

  19. 19

    const引用何时比C ++ 11中的按值传递更好?

  20. 20

    js中的函数按值或引用复制/传递

  21. 21

    在重载函数中按引用传递对象或按值传递对象

  22. 22

    对在C#中按引用传递和按值传递感到困惑

  23. 23

    在C#中,我应该按值传递参数并返回相同的变量,还是按引用传递?

  24. 24

    我是否正确理解C中的按值传递和按引用传递?

  25. 25

    C ++中按引用传递和按值传递之间过载歧义的可行解决方案

  26. 26

    分片是按值传递的吗?

  27. 27

    Qt并发运行,按引用传递值,但是内存地址不同吗?

  28. 28

    Objective-C是按值传递还是按引用传递?

  29. 29

    C#按值传递与按引用传递

热门标签

归档