print(sys.getsizeof(
2 **
30-
1))
print(sys.getsizeof(
2 **
30))
print(sys.getsizeof(
2 **
60-
1))
print(sys.getsizeof(
2 **
60))
print(sys.getsizeof(
1100000000))
print(sys.getsizeof([
0,
1000000000]))
print(sys.getsizeof([]))
print(sys.getsizeof([
0,
1]))
print(sys.getsizeof([
0,
1,
2]))
print(sys.getsizeof([
0,
1,
2,
3]))
print(sys.getsizeof([
0,
1,
2,
3,
200000]))
28
32
32
36
32
72
56
72
80
88
96
------------------------------------------------------
import time
import sys
time_start = time.time()
g1 = [x
for x
in range(
1130000000)]
time_end = time.time()
print(
'列表生成式返回结果花费的时间: %s' % (time_end - time_start))
print(
'列表生成式返回结果占用内存大小:%s' % sys.getsizeof(g1))
0-10亿数字组成的列表对象占用内存7.51G(列表中每个数字约占8byte)
列表生成式返回结果花费的时间: 74.34925079345703
列表生成式返回结果占用内存大小:8058558872
0-11亿数字组成的列表对象占用内存8.44G(列表中每个数字约占8byte)
列表生成式返回结果花费的时间: 88.95576000213623
列表生成式返回结果占用内存大小:9065878776
0-11.1亿数字组成的列表对象占用内存8.44G(开始没变化了)
列表生成式返回结果花费的时间: 88.95576000213623
列表生成式返回结果占用内存大小:9065878776
0-11.3亿数字组成的列表对象 32G内存电脑开始悲催了
:
MemoryError
------------------------------------------------------
考虑用生成器
def my_range(start, end):
for x
in range(start, end):
yield x
time_start = time.time()
g2 = my_range(
0,
1000000000000000000)
time_end = time.time()
print(
'生成器返回结果花费的时间: %s' % (time_end - time_start))
print(
'生成器返回结果占用内存大小:%s' % sys.getsizeof(g2))
生成器返回结果花费的时间: 0.0
生成器返回结果占用内存大小:112
------------------------------------------------------
python中list最多可保存多少元素32位python的限制是 536870912 个元素
64位python的限制是 1152921504606846975 个元素