Влияние памяти на объекты, созданные в python [duplicate]

Этот запрос не будет работать, если вы не создадите для него индекс . Это можно сделать, создав его вручную в своей Firebase Console или если вы используете Android Studio, вы найдете в своем логарифме сообщение, которое звучит так:

FAILED_PRECONDITION: The query requires an index. You can create it here: ...

Вы можете просто нажать на эту ссылку или скопировать и вставить URL-адрес в веб-браузер, и ваш индекс будет создан автоматически.

6
задан Jason Plank 21 March 2016 в 13:05
поделиться

5 ответов

Да, такое же поведение в python3 также

0
ответ дан Abhishek 28 August 2018 в 20:02
поделиться

Мои 5 центов:

  1. , самое главное, python освобождает память только для ссылочных объектов (не для классов, потому что это просто контейнеры или пользовательские типы данных). Опять же, в python все является объектом, поэтому int, float, string, [], {} и () все являются объектами. Это означает, что если ваша программа больше не ссылается на них, они становятся жертвами сбора мусора.
  2. Хотя python использует «счетчик времени» и «GC» для освобождения памяти (для объектов, которые не используются) эта свободная память не возвращается обратно в операционную систему (в Windows это может быть другой вариант). Это означает, что свободный кусок памяти возвращается обратно к интерпретатору python не к операционной системе. Таким образом, ваш процесс python будет иметь одинаковую память. Тем не менее, python будет использовать эту память для выделения другим объектам.

Очень хорошее объяснение для этого дано в: http://deeplearning.net/software/theano/tutorial/ Python-памяти management.html

1
ответ дан Jadav Bheda 28 August 2018 в 20:02
поделиться
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 была разделена на две части. Хранилище памяти кучи памяти
  • Методы и переменные создаются в памяти стека.
  • Значения переменных объектов и экземпляров создаются в памяти кучи.
  • В стеке памяти - создается стековый фрейм всякий раз, когда создаются методы и переменные.
  • Эти стеки кадры уничтожаются автоматически, когда возвращаются функции / методы.
  • Python имеет механизм сбора мусора, как только возвращаются переменные и функции, сборщик мусора очищает мертвые объекты.
0
ответ дан Magimai Orieal Fethics 28 August 2018 в 20:02
поделиться

Прочитайте следующие статьи о управлении памятью Python:

Python: Управление памятью

Exerpt: (примеры можно найти в статье):

Управление памятью в Python включает частную кучу, содержащую все объекты и структуры данных Python. Управление этой частной кучей обеспечивается внутренним менеджером памяти Python. Диспетчер памяти Python имеет разные компоненты, которые имеют дело с различными аспектами управления динамическими хранилищами, такими как совместное использование, сегментация, предварительное распределение или кеширование.

На самом низком уровне распределенный источник памяти обеспечивает достаточное пространство в частной куча для хранения всех связанных с Python данных, взаимодействуя с менеджером памяти операционной системы. В дополнение к распределенному распределителю памяти несколько объектно-ориентированных распределителей работают в одной и той же куче и реализуют различные политики управления памятью, адаптированные к особенностям каждого типа объекта. Например, целые объекты управляются по-разному в куче, чем строки, кортежи или словари, потому что целые числа подразумевают разные требования к хранению и компромиссы между скоростью и пространством. Таким образом, диспетчер памяти Python делегирует часть работы объектно-ориентированным распределителям, но гарантирует, что последние работают в рамках частной кучи.

Важно понимать, что управление кучей Python выполняется самим интерпретатором и что пользователь не контролирует его, даже если она регулярно манипулирует указателями объектов на блоки памяти внутри этой кучи. Выделение кучного пространства для объектов Python и других внутренних буферов выполняется по требованию менеджером памяти Python с помощью функций API Python / C, перечисленных в этом документе.

5
ответ дан Michel Keijzers 28 August 2018 в 20:02
поделиться

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, но как только эта функция выходит из какой-либо переменной, она держит ссылку на них, и они являются честной игрой для удаления сборщика мусора.

16
ответ дан Mud 28 August 2018 в 20:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: