💭

【小ネタ】Queue と LifoQueue のデータ型

2022/04/10に公開

Python には Queue と LifoQueue というモジュールがある.これらのデータ型に関する小ネタを紹介する.
まずは Queue の使い方について説明する.

from queue import Queue

arr = [1, 2, 3]
q = Queue()
for num in arr:
    q.put(num)
    
print(q)

以上のように Queue モジュールを使うと Queue というデータ構造に要素を入れることができる.
これを print すると以下のような結果になる.

<queue.Queue object at 0x7ff7d3d08dd0>

これでは Queue に入っている要素がわからない.そこでコードを以下のように書き換えることで

print(q.queue)

以下のように要素を出力することができる.

deque([1, 2, 3])

同様に LifoQueue も使うと

from queue import LifoQueue

arr = [1, 2, 3]
lq = LifoQueue()
for num in arr:
    lq.put(num)
    
print(lq)

以下のように出力される.

<queue.LifoQueue object at 0x7fb4ed40e090>

そこで以下のように書き換えると

print(lq.queue)

以下のように出力される.

[1, 2, 3]

ここで気づいた人もいるかもしれないが q.queue は deque 型,lq.queue は list 型なのである.
 
 
 
以上小ネタでした.
この設計にした理由やデータ構造との関係など知っている方がいらっしゃったら教えてください.
 
(追記 4/17)
list は最後への要素の追加と削除を O(1) で行えるため LifoQueue と同じような構造であるが,Queue は最初の要素の削除を O(1) で行うが list では行えないので deque 型となっている.
このような結論に至った.

Discussion