Этот запрос не будет работать, если вы не создадите для него индекс . Это можно сделать, создав его вручную в своей Firebase Console или если вы используете Android Studio, вы найдете в своем логарифме сообщение, которое звучит так:
FAILED_PRECONDITION: The query requires an index. You can create it here: ...
Вы можете просто нажать на эту ссылку или скопировать и вставить URL-адрес в веб-браузер, и ваш индекс будет создан автоматически.
Мои 5 центов:
Очень хорошее объяснение для этого дано в: http://deeplearning.net/software/theano/tutorial/ Python-памяти management.html
x =10
print (type(x))
менеджер памяти (MM): x указывает на 10
y = x
if(id(x) == id(y)):
print('x and y refer to the same object')
(MM): y указывает на тот же 10 объект
x=x+1
if(id(x) != id(y)):
print('x and y refer to different objects')
(MM): x указывает на другой объект - 11, ранее выделенный объект был уничтожен
z=10
if(id(y) != id(z)):
print('y and z refer to same object')
else:
print('y and z refer different objects')
Прочитайте следующие статьи о управлении памятью Python:
Exerpt: (примеры можно найти в статье):
Управление памятью в Python включает частную кучу, содержащую все объекты и структуры данных Python. Управление этой частной кучей обеспечивается внутренним менеджером памяти Python. Диспетчер памяти Python имеет разные компоненты, которые имеют дело с различными аспектами управления динамическими хранилищами, такими как совместное использование, сегментация, предварительное распределение или кеширование.
На самом низком уровне распределенный источник памяти обеспечивает достаточное пространство в частной куча для хранения всех связанных с Python данных, взаимодействуя с менеджером памяти операционной системы. В дополнение к распределенному распределителю памяти несколько объектно-ориентированных распределителей работают в одной и той же куче и реализуют различные политики управления памятью, адаптированные к особенностям каждого типа объекта. Например, целые объекты управляются по-разному в куче, чем строки, кортежи или словари, потому что целые числа подразумевают разные требования к хранению и компромиссы между скоростью и пространством. Таким образом, диспетчер памяти Python делегирует часть работы объектно-ориентированным распределителям, но гарантирует, что последние работают в рамках частной кучи.
Важно понимать, что управление кучей Python выполняется самим интерпретатором и что пользователь не контролирует его, даже если она регулярно манипулирует указателями объектов на блоки памяти внутри этой кучи. Выделение кучного пространства для объектов Python и других внутренних буферов выполняется по требованию менеджером памяти Python с помощью функций API Python / C, перечисленных в этом документе.
blockquote>
Python - как C #, Java, Perl, Ruby, Lua и многие другие языки - использует сборку мусора, а не ручное управление памятью. Вы просто произвольно создаете объекты и диспетчер памяти языка периодически (или когда вы специально направляете его) ищет любые объекты, которые больше не ссылаются на вашу программу.
Итак, если вы хотите удержать объект , просто держите ссылку на него. Если вы хотите, чтобы объект был освобожден (в конечном итоге), удалите любые ссылки на него.
def foo(names):
for name in names:
print name
foo(["Eric", "Ernie", "Bert"])
foo(["Guthtrie", "Eddie", "Al"])
Каждый из этих вызовов foo
создает объект Python list
, инициализированный тремя значениями. На время вызова foo
они ссылаются на переменную names
, но как только эта функция выходит из какой-либо переменной, она держит ссылку на них, и они являются честной игрой для удаления сборщика мусора.