Атрибут hasobject
Атрибут hasobject класса dtype возвращает True,
если dtype содержит ссылки на объекты Python (например, строки,
списки или пользовательские классы), и False в противном
случае. Это свойство помогает определить, требует ли массив
особого внимания при выполнении операций, которые могут создавать
копии данных, поскольку объекты Python не копируются так же,
как числовые значения.
Синтаксис
dtype.hasobject
Атрибут не принимает аргументов и возвращает значение типа
bool.
Пример
Создадим массив чисел и проверим значение атрибута
hasobject для его dtype:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
res = arr.dtype.hasobject
print(res)
Результат выполнения кода:
False
Для числовых массивов атрибут возвращает False, поскольку
их элементы являются значениями, а не ссылками на объекты.
Пример
Теперь создадим массив строк и проверим атрибут
hasobject:
import numpy as np
arr = np.array(['a', 'b', 'c', 'd', 'e'])
res = arr.dtype.hasobject
print(res)
Результат выполнения кода:
True
Строковый dtype возвращает True, так как строки в NumPy
хранятся как объекты Python, если только не задан фиксированный
размер (например, 'U10').
Пример
Создадим массив с dtype 'U3' (фиксированная длина строки) и проверим атрибут:
import numpy as np
arr = np.array(['abc', 'de', 'fghi'], dtype='U3')
res = arr.dtype.hasobject
print(res)
Результат выполнения кода:
False
Фиксированный строковый dtype также не содержит ссылок на объекты Python, поскольку строки хранятся как последовательности символов в фиксированном буфере.
Пример
Используем атрибут hasobject для проверки dtype
массива объектов:
import numpy as np
arr = np.array([[1, 2], [3, 4]], dtype=object)
res = arr.dtype.hasobject
print(res)
Результат выполнения кода:
True
Массив с dtype=object содержит ссылки на объекты Python,
поэтому атрибут возвращает True.