空間複雜度,空間指的是在執行程式碼時所耗費的記憶體容量。空間複雜度與時間複雜度的表示方式相同,都用Big O來表示。時間複雜度以執行完成的步數為主,不考慮使用的記憶體大小,同樣的,空間複雜度考慮的是記憶體的大小,而非執行完成的時間。
from memory_profiler import profile
@profile
def my_func():
a = [2] * (100 ** 6)
b = [10] * (2 * 10 ** 7)
del b
return a
if __name__ == '__main__':
my_func()
輸出結果
Line # Mem usage Increment Occurences Line Contents
============================================================
3 12.7 MiB 12.7 MiB 1 @profile
4 def my_func():
5 20.3 MiB 7.6 MiB 1 a = [2] * (10 ** 6)
6 172.9 MiB 152.6 MiB 1 b = [10] * (2 * 10 ** 7)
7 20.3 MiB -152.6 MiB 1 del b
8 20.3 MiB 0.0 MiB 1 return a
在這裡使用的是Python的memory_profiler模組,可以用來計算程序執行所佔的記憶體空間,當然,若是越複雜的程序執行起來,可能會讓電腦都癱瘓了(笑)
若是有興趣進一步了解的人,可以參考下列官方文件