Сколько байтов на элемент находится там в списке Python (кортеж)?

Добавьте приведенные ниже коды в ПОСЛЕ ТОЛЬКО ПОСЛЕ ИНИЦИАЛИЗАЦИОННОЙ ТАБЛИЦЫ

if ($(".dataTables_empty").length) {
$(".dataTables_wrapper").hide(); }

Я сделал это, чтобы решить проблему

<script type="text/javascript"> $(document).ready(function() {
$('#example').DataTable(); if ($(".dataTables_empty").length) { $(".dataTables_wrapper").hide();} } ); </script>
14
задан jfs 25 September 2008 в 21:08
поделиться

6 ответов

Полезные ссылки:

, Как получить емкость памяти / использование объекта Python

Емкости памяти объектов Python?

, если Вы помещаете данные в словарь, как мы вычисляем размер данных?

Однако они не дают категорический ответ. Способ пойти:

  1. память Меры, использованная интерпретатором Python с/без списком (используют инструменты OS).

  2. Использование сторонний дополнительный модуль, который определяет своего рода sizeof (PyObject).

Обновление :

Рецепт 546530: Размер объектов Python (пересмотрел)

import asizeof

N = 1000000
print asizeof.asizeof(range(N)) / N
# -> 20 (python 2.5, WinXP, 32-bit Linux)
# -> 33 (64-bit Linux)
14
ответ дан 1 December 2019 в 06:24
поделиться

часть "кортежа" Обращения вопроса

Объявление PyTuple CPYTHON в типичной конфигурации сборки сводится к этому:

struct PyTuple {
  size_t refcount; // tuple's reference count
  typeobject *type; // tuple type object
  size_t n_items; // number of items in tuple
  PyObject *items[1]; // contains space for n_items elements
};

Размер экземпляра PyTuple фиксируется во время, он - конструкция и не может быть изменен впоследствии. Число байтов, занятых PyTuple, может быть вычислено как [1 112]

sizeof(size_t) x 2 + sizeof(void*) x (n_items + 1).

Это дает мелкий размер кортежа. Для получения полным измеряют Вас, также должен добавить, что общее количество байтов, использованных графом объектов, базировалось в PyTuple::items[] массив.

стоит отметить, что стандартные программы конструкции кортежа удостоверяются, что только единственный экземпляр пустого кортежа когда-либо создается (одиночный элемент).

Ссылки: Python.h, object.h, tupleobject.h, tupleobject.c

6
ответ дан 1 December 2019 в 06:24
поделиться

"Это зависит". Python выделяет место для списков таким способом как для достижения , амортизировал постоянное время для добавления элементов к списку.

На практике, то, что это означает с текущей реализацией, является... списком, всегда имеет место, выделенное для power-two числа элементов. Таким образом, диапазон (1000000) на самом деле выделит список, достаточно большой для содержания 2^20 элементы (~ 1,045 миллионов).

Это - только пространство, требуемое сохранить саму структуру списка (который является массивом указателей на объекты Python для каждого элемента). 32-разрядная система потребует 4 байтов за элемент, 64-разрядная система будет использовать 8 байтов за элемент.

, Кроме того, Вы должны расположить с интервалами для хранения фактических элементов. Это значительно различается. Для маленьких целых чисел (-5 к 256 в настоящее время), не необходимо никакое дополнительное пространство, но для большего числа Python выделяет новый объект для каждого целого числа, которое берет 10-100 байтов и имеет тенденцию фрагментировать память.

Нижняя строка: это усложнило , и списки Python не хороший способ сохранить большие структуры гомогенных данных. Для этого используйте array модуль или, если необходимо сделать векторизованную математику, используйте NumPy.

пз - Кортежи, в отличие от списков, не разработаны , чтобы добавить элементы прогрессивно им. Я не знаю, как средство выделения работает, но даже не думайте об использовании его для больших структур данных :-)

23
ответ дан 1 December 2019 в 06:24
поделиться

А новая функция, getsizeof(), берет объект Python и возвращает объем памяти, используемый объектом, измеряемым в байтах. Встроенные объекты возвращают корректные результаты; сторонние расширения не могут, но могут определить __sizeof__() метод для возврата object’s размера.

kveretennicov@nosignal:~/py/r26rc2$ ./python
Python 2.6rc2 (r26rc2:66712, Sep  2 2008, 13:11:55) 
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
>>> import sys
>>> sys.getsizeof(range(1000000))
4000032
>>> sys.getsizeof(tuple(range(1000000)))
4000024

, Очевидно, возвращенные числа не включают память, использованную содержащими в нем объектами (sys.getsizeof (1) == 12).

4
ответ дан 1 December 2019 в 06:24
поделиться

Это - конкретная реализация, я вполне уверен. Конечно, это зависит от внутреннего представления целых чисел - Вы не можете предположить, что они будут сохранены как 32-разрядные, так как Python дает Вам произвольно большие целые числа поэтому, возможно, маленькие ints хранятся более сжато.

На моем Python (2.5.1 на Fedora 9 на Core 2 Duo) VmSize перед выделением составляет 6896 КБ, после того, как будут 22684 КБ. После еще одного миллиона присвоения элемента VmSize переходит к 38340 КБ. Это очень чрезвычайно указывает приблизительно на 16000 КБ для 1 000 000 целых чисел, который составляет приблизительно 16 байтов за целое число. Это предлагает партия из издержек для списка. Я взял бы эти числа с большой щепоткой соли.

2
ответ дан 1 December 2019 в 06:24
поделиться

Я опасаюсь, почему Вы спрашиваете. Вы пытаетесь выяснить, в каком количестве памяти Вы будете нуждаться для данной реализации? Скажите, Вы собираетесь считать 10 000 000 виджетов и хотеть знать, сколько RAM это высосет?

, Если это так, вместо того, чтобы пытаться выяснить, сколько RAM каждый виджет берет, фигура, сколько RAM, скажем, 10 000 виджетов берет и увеличь для получения фактического размера.

-1
ответ дан 1 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

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