美文网首页
python之引用实例

python之引用实例

作者: g_s_007 | 来源:发表于2021-05-19 15:20 被阅读0次

非原创,如侵,请告知
原文来自git : https://github.com/leisurelicht/wtfpython-cn

下面是一个在互联网上非常有名的例子.

>>> a = 256
>>> b = 256
>>> a is b
True

>>> a = 257
>>> b = 257
>>> a is b
False

>>> a = 257; b = 257
>>> a is b
True

说明:

is== 的区别

  • is 运算符检查两个运算对象是否引用自同一对象 (即, 它检查两个运算对象是否相同).

  • == 运算符比较两个运算对象的值是否相等.

  • 因此 is 代表引用相同, == 代表值相等. 下面的例子可以很好的说明这点,

>>> [] == []
True
>>> [] is [] # 这两个空列表位于不同的内存地址.
False

256 是一个已经存在的对象, 而 257 不是

当你启动Python 的时候, 数值为 -5256 的对象就已经被分配好了. 这些数字因为经常被使用, 所以会被提前准备好.

Python 通过这种创建小整数池的方式来避免小整数频繁的申请和销毁内存空间.

引用自 https://docs.python.org/3/c-api/long.html

当前的实现为-5到256之间的所有整数保留一个整数对象数组, 当你创建了一个该范围内的整数时, 你只需要返回现有对象的引用. 所以改变1的值是有可能的. 我怀疑这种行为在Python中是未定义行为. :-)

>>> id(256)
10922528
>>> a = 256
>>> b = 256
>>> id(a)
10922528
>>> id(b)
10922528
>>> id(257)
140084850247312
>>> x = 257
>>> y = 257
>>> id(x)
140084850247440
>>> id(y)
140084850247344

这里解释器并没有智能到能在执行 y = 257 时意识到我们已经创建了一个整数 257, 所以它在内存中又新建了另一个对象.

ab 在同一行中使用相同的值初始化时,会指向同一个对象.

>>> a, b = 257, 257
>>> id(a)
140640774013296
>>> id(b)
140640774013296
>>> a = 257
>>> b = 257
>>> id(a)
140640774013392
>>> id(b)
140640774013488
  • 当 a 和 b 在同一行中被设置为 257 时, Python 解释器会创建一个新对象, 然后同时引用第二个变量. 如果你在不同的行上进行, 它就不会 "知道" 已经存在一个 257 对象了.

  • 这是一种特别为交互式环境做的编译器优化. 当你在实时解释器中输入两行的时候, 他们会单独编译, 因此也会单独进行优化. 如果你在 .py 文件中尝试这个例子, 则不会看到相同的行为, 因为文件是一次性编译的.

相关文章

  • python之引用实例

    非原创,如侵,请告知原文来自git : https://github.com/leisurelicht/wtfpy...

  • Python精简学习(八)

    Python精简学习之函数引用-函数引用

  • Python实例方法、类方法、静态方法

    实例方法,类方法,静态方法都可以通过实例或者类调用,只不过实例方法通过类调用时需要传递实例的引用(python 3...

  • 实例就地操作类属性

    Python 中,类实例可以引用类的属性,就地操作符可以就地修改一个可变对象。那么通过实例引用一个可变类型的类属性...

  • Python之引用

    从截图例子中会有如下疑问: 1、为何字符串赋值,改变值时,change的值未被改变? 答:因为将42赋值给test...

  • Python基础

    Python 基础教程 实例(Python 2.0+) 实例(Python 3.0+) Python 简介 Pyt...

  • Swift 中的强引用循环

    强引用循环 两个引用类型实例之间相互引用。 解决方式 实例之间的: Weak 引用。适用于一方的引用可为 nil ...

  • swift防止循环引用简单整理

    weak 弱引用不会对其引用的实例保持强引用,因而不会阻止 ARC 销毁被引用的实例。这个特性阻止了引用变为循环强...

  • 双冒号方法引用

    类别使用形式静态方法引用类名 :: 静态方法名实例方法引用对象名(引用名) :: 实例方法名类方法引用类名 :: ...

  • join()的使用方法:

    实例 以下实例展示了join()的使用方法:实例(Python 2.0+) !/usr/bin/python --...

网友评论

      本文标题:python之引用实例

      本文链接:https://www.haomeiwen.com/subject/iaupjltx.html