Как это может быть дольше, чем
tmp = my_list[indexOfPwd2]
my_list[indexOfPwd2] = my_list[indexOfPwd2 + 1]
my_list[indexOfPwd2 + 1] = tmp
Это простой обмен с использованием временного хранилища.
Queue.Queue
и collections.deque
служите различным целям. Очередь. Очередь предназначается для разрешения различных потоков связаться, использование поставило сообщения/данные в очередь, тогда как collections.deque
просто предназначается как datastructure. Вот почему Queue.Queue
имеет методы как put_nowait()
, get_nowait()
, и join()
, тогда как collections.deque
не делает. Queue.Queue
не предназначается, чтобы использоваться в качестве набора, который является, почему он испытывает недостаток в подобных in
оператор.
Это сводится к этому: если у Вас есть несколько потоков, и Вы хотите, чтобы они смогли связаться без потребности в блокировках, Вы ищете Queue.Queue
; если Вы просто хотите очередь или очередь с двусторонним доступом как datastructure, использовать collections.deque
.
Наконец, получая доступ и управляя внутренней двухсторонней очередью a Queue.Queue
играет с огнем - Вы действительно не хотите делать это.
deque
ориентировано на многопотоковое исполнение. "операции, которые не требуют блокировки", означают, что Вы не должны делать блокировки себя, deque
заботится о нем.
Взгляд на Queue
источник, внутреннюю двухстороннюю очередь называют self.queue
и использует взаимное исключение для средств доступа и мутаций, таким образом, Queue().queue
не ориентировано на многопотоковое исполнение для использования.
Если Вы ищете "в" операторе, то двухсторонняя очередь или очередь являются возможно не самой соответствующей структурой данных для Вашей проблемы.