Я создал этот автономный пример, чтобы изолировать поведение, которое я пытаюсь понять:
from pprint import pprint
TRADES_CLOSED = dict()
TRADES_ACTIVE = {
'2010-01-08 12:00': [1, 'SHORT', 20000, '2010-01-08 12:00', 92.339],
'2010-01-28 04:00': [2, 'LONG', 10000, '2010-01-28 04:00', 90.378],
'2010-01-28 12:00': [3, 'SHORT', 10000, '2010-01-28 12:00', 89.824],
'2010-01-29 04:00': [4, 'LONG', 20000, '2010-01-29 04:00', 90.164]}
TRADES_TEST = {k: TRADES_ACTIVE[k] for k in sorted(TRADES_ACTIVE)[-2:]}
pprint(TRADES_ACTIVE)
pprint(TRADES_TEST)
profit_long = TRADES_ACTIVE.pop([key for key, value in TRADES_TEST.items() if value[1] == "LONG"][0])
profit_long.extend(['2010-02-03 12:00', 91.278, 1464.54])
pprint(TRADES_ACTIVE)
pprint(TRADES_TEST)
TRADES_CLOSED[[key for key, value in TRADES_TEST.items() if value[1] == "LONG"][0]] = profit_long
pprint(TRADES_CLOSED)
Я хочу выполнить некоторые операции с двумя последними записями в словаре TRADES_ACTIVE
.Поэтому я создаю новый словарь с именем TRADES_TEST
, который содержит только последние две записи из TRADES_ACTIVE
.
. Код выдает следующие выходные данные:
{'2010-01-08 12:00': [1, 'SHORT', 20000, '2010-01-08 12:00', 92.339],
'2010-01-28 04:00': [2, 'LONG', 10000, '2010-01-28 04:00', 90.378],
'2010-01-28 12:00': [3, 'SHORT', 10000, '2010-01-28 12:00', 89.824],
'2010-01-29 04:00': [4, 'LONG', 20000, '2010-01-29 04:00', 90.164]}
{'2010-01-28 12:00': [3, 'SHORT', 10000, '2010-01-28 12:00', 89.824],
'2010-01-29 04:00': [4, 'LONG', 20000, '2010-01-29 04:00', 90.164]}
{'2010-01-08 12:00': [1, 'SHORT', 20000, '2010-01-08 12:00', 92.339],
'2010-01-28 04:00': [2, 'LONG', 10000, '2010-01-28 04:00', 90.378],
'2010-01-28 12:00': [3, 'SHORT', 10000, '2010-01-28 12:00', 89.824]}
{'2010-01-28 12:00': [3, 'SHORT', 10000, '2010-01-28 12:00', 89.824],
'2010-01-29 04:00': [4,
'LONG',
20000,
'2010-01-29 04:00',
90.164,
'2010-02-03 12:00',
91.278,
1464.54]}
{'2010-01-29 04:00': [4,
'LONG',
20000,
'2010-01-29 04:00',
90.164,
'2010-02-03 12:00',
91.278,
1464.54]}
profit_long
listсоздается путем добавления определенного элемента TRADES_ACTIVE
.Как и ожидалось TRADES_ACTIVE
один элемент короче.Затем profit_long
расширяется тремя новыми значениями и используется как запись в словаре TRADES_CLOSED
.
Я не понимаю, почему расширение profit_long
влияет и на TRADES_TEST
.Я долго следил за этим кодом и не могу понять.Для меня profit_long
и TRADES_TEST
- совершенно разные сущности.Как это возможно?