关于小整数

来源:7-2 ==和is的区别

xmzls

2018-04-17

老师,视频里说,只有小整数 [-5,256]才会使用intern机制,那我使用 1000000000000,为什么也是使用同一个内存空间呢?

a = 1000000000000

b = 1000000000000

print (id(a)==id(b)) # True

print(a is b) # True


写回答

5回答

夜里等天明

2019-07-15

~ python3.6
Python 3.6.7 (v3.6.7:6ec5cf24b7, Oct 20 2018, 03:02:14)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = "abcefghigklnmopqrstabcefghigklnmopqrstabcefghigklnmopqrstabcefghigklnmopqrst"
>>> b = "abcefghigklnmopqrstabcefghigklnmopqrstabcefghigklnmopqrstabcefghigklnmopqrst"
>>> a is b
True

你好,Bobby老师,关于字符串我在交互环境测试了一下  发现很长的字符串只要相等,他们的就是指向的同一个对象

1
2
夜里等天明
回复
bobby
好的,谢谢老师解答
2019-07-16
共2条回复

慕村3371505

2021-05-30

//img.mukewang.com/szimg/60b37a240853254910221316.jpg

//img.mukewang.com/szimg/60b37a2408f91b7610481330.jpg

在不同的文件下运行结果就不一样

0
0

bobby

2018-04-19

小整数池

整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间。
Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,无论这个整数处于LEGB中的哪个位置,
所有位于这个范围内的整数使用的都是同一个对象。同理,单个字母也是这样的。

大整数池

终端是每次执行一次,所以每次的大整数都重新创建,而在pycharm中,每次运行是所有代码都加载都内存中,属于一个整体,所以
 这个时候会有一个大整数对象池,即处于一个代码块的大整数是同一个对象。c1 和d1 处于一个代码块,而c1.b和c2.b分别有自己的代码块,所以不相等。


0
1
夜里等天明
你好,Bobby老师,关于字符串我在交互环境测试了一下 ``` ~ python3.6 Python 3.6.7 (v3.6.7:6ec5cf24b7, Oct 20 2018, 03:02:14) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> a = "abcefghigklnmopqrstabcefghigklnmopqrstabcefghigklnmopqrstabcefghigklnmopqrst" >>> b = "abcefghigklnmopqrstabcefghigklnmopqrstabcefghigklnmopqrstabcefghigklnmopqrst" >>> a is b True ``` 发现很长的字符串只要相等,他们的就是指向的同一个对象
2019-07-15
共1条回复

xmzls

提问者

2018-04-18

使用python test.py的方式执行也是True,那这个小整数的意义是什么呢?

0
0

xmzls

提问者

2018-04-18

IDE是True,在交互环境是False

0
0

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程