1. ホーム
  2. python

[解決済み] Pythonのdequesはどのように実装され、どのような場合にリストより悪くなるのでしょうか?

2023-02-16 04:42:02

質問

最近、自分のコードをより効率的にするために、Pythonで様々なデータ構造がどのように実装されているかを調べることにハマっています。リストとdequesがどのように動作するかを調べる中で、私はシフトとアンシフトをしたいときに、リストのO(n)からdequesのO(1)に時間を短縮して利益を得られることがわかりました(リストは固定長の配列として実装され、何かが先頭に挿入されるたびに完全にコピーされなければならない、など...)。しかし、dequeがどのように実装されるのか、また、リストに対するデメリットの詳細については、見つけることができません。これらの2つの質問について、誰かが私を啓発することができますか?

どのように解決するのですか?

https://github.com/python/cpython/blob/v3.8.1/Modules/_collectionsmodule.c

<ブロッククオート

A dequeobject は2重にリンクされたリストで構成されます。 block のノードで構成される。

そうそう、このような deque は、別の回答が示唆するように、(二重)リンクリストです。

詳しく説明します。一方、dequesは端から物を押したり出したりするのにずっと便利で、インデックス付け(興味深いことに、スライスはできません)も可能ですが、リストより遅いです。