damngoto
V2EX  ›  Python

Float identity

By damngoto at 2022 年 7 月 28 日 · 2796 次点击
# Equal
ai = 1
bi = 1
print(id(ai), id(bi))

# Not equal
af = 1.0
bf = 1.0
print(id(af), id(bf))
# False

float 在 Python 里面不是 immutable 的 primitive type 吗? 为啥和 int 表现的不一样呢?

7 条回复  •  2022-07-28 23:07:38 +08:00
ClericPy
   1
ClericPy  
   2022 年 7 月 28 日   ❤️ 1
[-5, 256] 是常驻内存的

>>> a = -7
>>> b = -7
>>> a is b
False
damngoto
   2
damngoto  
OP
   2022 年 7 月 28 日
@ClericPy 学习了。
想问下 string 的表现该怎么解释呢?
ClericPy
   3
ClericPy  
   2022 年 7 月 28 日
@damngoto 没懂, 那些常驻内存的东西就是默认情况下赋值就直接从内存里拿来用, 不会重新申请内存. 字符串是重新申请内存的
0xo
   4
0xo  
   2022 年 7 月 28 日   ❤️ 1
filwaline
   5
filwaline  
   2022 年 7 月 28 日 via Android   ❤️ 2
https://github.com/satwikkansal/wtfpython

新 P 友看看 wtf-python 吧,各种奇怪特性包罗万象嘿嘿嘿
damngoto
   6
damngoto  
OP
   2022 年 7 月 28 日 via Android
@ClericPy 但是两个值一样的字符串 identity 是一样的。
damngoto
   7
damngoto  
OP
   2022 年 7 月 28 日 via Android
@ccvzz @filwaline 看来我跳进了一个大坑。。。
推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
© 2026 V2EX · 28ms · 3.9.8.5