Короче говоря, они не будут одинаковыми.Список должен работать лучше, если только вы не можете иметь малонаселенные списки, которые могли бы быть реализованы в dict.
Как уже упоминалось несколькими другими, getsizeof не суммирует содержащиеся объекты.
Вот рецепт, который работает для вас на стандартных типах Python (3.0).
Вычислить объем памяти, занимаемой объектом и его содержимым
Используя этот рецепт на python 3.1, можно привести следующие результаты:
aList = [[x,x] for x in range(1000)]
aListMod10 = [[x%10,x%10] for x in range(1000)]
aTuple = [(x,x) for x in range(1000)]
aDictString = dict(("%s,%s" % (x,x),x) for x in range(1000))
aDictTuple = dict(((x,x),x) for x in range(1000))
print("0", total_size(0))
print("10", total_size(10))
print("100", total_size(100))
print("1000", total_size(1000))
print("[0,1]", total_size([0,1]))
print("(0,1)", total_size((0,1)))
print("aList", total_size(aList))
print("aTuple", total_size(aTuple))
print("aListMod10", total_size(aListMod10))
print("aDictString", total_size(aDictString))
print("aDictTuple", total_size(aDictTuple))
print("[0]'s", total_size([0 for x in range(1000)]))
print("[x%10]'s", total_size([x%10 for x in range(1000)]))
print("[x%100]'s", total_size([x%100 for x in range(1000)]))
print("[x]'s", total_size([x for x in range(1000)]))
Вывод:
0 12
10 14
100 14
1000 14
[0,1] 70
(0,1) 62
aList 62514
aTuple 54514
aListMod10 48654
aDictString 82274
aDictTuple 74714
[0]'s 4528
[x%10]'s 4654
[x%100]'s 5914
[x]'s 18514
Похоже, логически следует, что наиболее эффективным вариантом памяти было бы использование 2 списков:
list_x = [0, 1, ...]
list_y = [1, 0, ...]
Это может стоить того, только если у вас мало памяти иОжидается, что список будет большим.Я бы предположил, что шаблон использования будет создавать (x, y) кортежи повсюду в любом случае, так что может случиться так, что вы действительно должны просто сделать:
tuples = [(0, 1), (1, 0), ...]
При всех равных условиях, выберите то, что позволяетвам написать наиболее читаемый код.