Size: a a a

2021 November 25

A

Alex in Python
Проверил, возвращает 409 Conflict
источник

T

Tishka17 in Python
А кто напомнит, PyObject *ob_item[1]; - это по сути PyObject ** или нет?
источник

A

Alex in Python
Похоже на то. Вообще не понимаю зачем так писать. Наверное какая-то сишная магия, которую я не застал.
источник

T

Tishka17 in Python
Вот пытаюсь понять разницу


PyObject *
PyTuple_GetItem(PyObject *op, Py_ssize_t i)
{
   if (!PyTuple_Check(op)) {
       PyErr_BadInternalCall();
       return NULL;
   }
   if (i < 0 || i >= Py_SIZE(op)) {
       PyErr_SetString(PyExc_IndexError, "tuple index out of range");
       return NULL;
   }
   return ((PyTupleObject *)op) -> ob_item[i];
}



PyObject *
PyList_GetItem(PyObject *op, Py_ssize_t i)
{
   if (!PyList_Check(op)) {
       PyErr_BadInternalCall();
       return NULL;
   }
   if (!valid_index(i, Py_SIZE(op))) {
       if (indexerr == NULL) {
           indexerr = PyUnicode_FromString(
               "list index out of range");
           if (indexerr == NULL)
               return NULL;
       }
       PyErr_SetObject(PyExc_IndexError, indexerr);
       return NULL;
   }
   return ((PyListObject *)op) -> ob_item[i];
}
источник

A

Alex in Python
я не совсем понял где ты ob_item[1] увидел?
источник

nx

neumond x in Python
return ((PyTupleObject *)op) -> ob_item[i];
источник

T

Tishka17 in Python
источник

A

Alex in Python
ага, я кажется понял в чем разница.
нет это не одно и то же.
источник

nx

neumond x in Python
Похоже на указатель на массив из указателей на PyObject.
источник

T

Tishka17 in Python
ну по разному аллоцированы, не?
источник

A

Alex in Python
здесь PyTupleObject представлен в виде линейной структуры в памяти.
источник

T

Tishka17 in Python
эм,

return ((PyListObject *)op) -> ob_item[i];
return ((PyTupleObject *)op) -> ob_item[i];
источник

A

Alex in Python
Двойной указатель предполагает что память под массив ob_item может лежать где-угодно.
источник

T

Tishka17 in Python
   /* ob_item contains space for 'ob_size' elements.
      Items must normally not be NULL, except during construction when
      the tuple is not yet visible outside the function that builds it. */

там вот такой коммент
источник

T

Tishka17 in Python
ну, а массив?
источник

T

Tishka17 in Python
типа там же где структура?
источник

A

Alex in Python
ну а массив лежит в структуре, они потом делают реаллок всей структуре.
источник

T

Tishka17 in Python
ага, логично
источник

nx

neumond x in Python
>>> sys.getsizeof(())
40
>>> sys.getsizeof((1, ))
48
>>> sys.getsizeof((1, 2, ))
56

Забавно
источник

RV

Roman Voronov in Python
Прикольно! Тоже нашёл и метод уже протянут в некоторые либы типа tkinter. Коммент в CPython-коде интересный.
источник