bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

Python3中延時變量與free_list鏈表的區別有哪些

本文小編為大家詳細介紹“Python3中延時變量與free_list鏈表的區別有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python3中延時變量與free_list鏈表的區別有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

10年積累的成都網站制作、網站設計經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站制作后付款的網站建設流程,更有河西免費網站建設讓你可以放心的選擇與我們合作。

1、概念

1、區別

在Python3中,"延時變量" 和 "free_list鏈表" 是兩個不同的概念,他們之間沒有直接聯系。

2、延時變量(Lazy evaluation)

延時變量是指在某些情況下,Python不會立即計算表達式的值,而是等到需要用到這個值的時候在進行計算。這種方式稱為 "惰性計算" 或 "延時計算"。

例如:生成器(generator)就是一種延時計算的方式。

當創建一個生成器對象時,它不會立即生成所有的值,而是在需要時逐個生成,這種方式的優點是:節省內存空間和計算資源

3. free_list鏈表

free_list 鏈表 是Python3中的一個內存管理機制。采用了垃圾回收機制來自動管理內存空間,其中free_list鏈表是一種可以重復利用已經分配但未被使用的內存塊的機制。

當創建一個新對象時,Python會分配一塊內存空間,并將其標記為已使用。當對象不在被引用時,Python會自動將其標記為未使用,并將其添加到free_list鏈表中。當下次創建對象時,Python會首先檢查free_list鏈表中是否有可重復利用的內存塊,從而避免不必要的內存分配和釋放操作。

2、示例

1. 延時變量示例

在這個示例中,定義了一個生成器函數 fibonacci(),實現了斐波那契數列的生成邏輯。當我們創建一個生成器對象 fib 時,它不會立即生成所有的斐波那契數列數值,而是在需要時逐個生成。在這里,我們使用了 next() 函數來獲取下一個斐波那契數列數值。

# 定義一個生成器,實現斐波那契數列
def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a , b = b, a+b
#創建一個生成器對象
fib = fibonacci()
#打印前 10 個斐波那契數列數值
for i in range(10):
    print(next(fib))
'''
執行結果如下:
0
1
1
2
3
5
8
13
21
34
'''
2.free_list鏈表

在這個示例中,我們先創建了兩個相同的列表對象 ab,并打印它們的內存地址。然后,我們將 a 對象從內存中刪除,并使用 gc.collect() 強制進行垃圾回收。接著,我們創建了一個新的列表對象 c,并打印它的內存地址。最后,我們使用 sys.getsizeof([]) 函數檢查 free_list 鏈表中是否有可重復利用的內存塊

import sys
import gc
#創建兩個相同的列表對象
a = [1, 2, 3]
b = [1, 2, 3]
#打印a和b對象的內存地址
print("a 的內存地址:", id(a))
print("b 的內存地址:", id(b))
#將a 對象從內存中刪除
del a
# 創建一個新的列表對象 c
# 強制進行垃圾回收
gc.collect()
c = [1, 2, 3]
#打印 c 對象的內存地址
print("c 的內存地址:", id(c))
 
#檢查 free_list 鏈表中是否有可重復利用的內存塊
print("free_list 鏈表:", sys.getsizeof([]))
'''
執行結果如下:
a 的內存地址: 22203400
b 的內存地址: 22201928
c 的內存地址: 21904648
free_list 鏈表: 64
'''

 gc.collect() 可以強制進行垃圾回收,但并不意味著內存會立即被清空。Python 中的內存管理是由解釋器和操作系統共同管理的,具體的內存分配和回收時機也受到多種因素的影響,如垃圾回收器算法、系統內存使用情況等。

在上面的示例中,當我們刪除 a 對象并調用 gc.collect() 進行垃圾回收時,Python 解釋器會將 a 對象所占用的內存標記為可回收狀態,并將其添加到垃圾回收器的待回收列表中。但是,這并不意味著內存立即被回收,而是在垃圾回收器的下一輪回收時才會被清理。

另外,即使 a 對象所占用的內存被回收了,也不一定意味著該內存空間被立即釋放,因為 Python 中的內存管理采用了一種延遲分配的機制,即只有當需要申請更多內存時,Python 才會向操作系統請求分配新的內存空間。因此,在上面的示例中,雖然 a 對象的內存空間可能已經被回收,但該內存空間可能仍然被 Python 解釋器保留以供未來使用,從而避免不必要的內存分配和釋放開銷。

需要注意的是,即使 a、b、c 三個對象的內存地址不重復,也并不意味著它們占用的內存空間不會重疊。這是因為,Python 中的內存管理方式是以對象為單位進行分配和管理的,每個對象占用的內存空間可能是不連續的,因此不同對象的內存空間可能會部分重疊。

讀到這里,這篇“Python3中延時變量與free_list鏈表的區別有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注創新互聯行業資訊頻道。

分享名稱:Python3中延時變量與free_list鏈表的區別有哪些
網頁網址:http://vcdvsql.cn/article36/jhjpsg.html

成都網站建設公司_創新互聯,為您提供網站維護、小程序開發、網站排名、營銷型網站建設App開發、網站設計

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發