Собственно, это именно то, чего вы ожидаете. Давайте разложим, что здесь происходит:
Вы пишете
lst = [[1] * 4] * 3
Это эквивалентно:
lst1 = [1]*4
lst = [lst1]*3
Это означает, что lst
- это список с 3 элемента, указывающие на lst1
. Это означает, что две следующие строки эквивалентны:
lst[0][0] = 5
lst1[0] = 5
Поскольку lst[0]
- это только lst1
.
Чтобы получить желаемое поведение, вы можете использовать понимание списка:
lst = [ [1]*4 for n in xrange(3) ]
В этом случае выражение переоценивается для каждого n, что приводит к другому списку.
Невозможно достичь этого, используя структуру базы данных, поскольку между вашим корневым узлом и объектами, содержащими свойство name_mov
, есть 4 дочерних элемента, mov
, bolly
, new
и заданный идентификатор. .
Вы можете использовать следующий запрос:
Query firebaseSearchQuery = mDatabaseReference
.child("mov")
.child("bolly")
.child("new")
.orderByChild("name_mov")
.equalTo(s);
Но вы сможете получить только названия фильмов, которые существуют в узле new
. Если вы хотите получить все титры, вам следует реструктурировать базу данных, добавив тип фильма (новый, популярный и т. Д.) В качестве свойства ваших объектов, а затем просто использовать:
Query firebaseSearchQuery = mDatabaseReference
.child("mov")
.child("bolly")
.orderByChild("name_mov")
.equalTo(s);
Таким образом у вас будет меньше уровень, и запрос будет работать отлично.