Python интернирует (переиспользует) строковые литералы, особенно короткие. Поэтому a is b возвращает True, так как обе переменные указывают на один и тот же объект в памяти. А вот c создаётся в рантайме с помощью join(), и хоть его значение такое же, объект в памяти другой, поэтому a is c возвращает False.
У нас есть Series с числами: [1, 2, 3, np.nan, 4, 5]. Когда мы вызываем numbers.sum(skipna=False), мы явно указываем, что НЕ хотим пропускать значения nan. В этом случае, любая арифметическая операция с nan (включая суммирование) даст результат nan. Любая арифметическая операция с nan всегда возвращает nan
При наличии в источнике данных хотя бы одного отсутствующего значения библиотека pandas преобразует все целочисленные значения в значения с плавающей точкой.
В Python каждый класс хранит кортеж своих непосредственных родительских (базовых) классов в атрибуте `__bases__`. Чтобы получить список базовых классов для класса `Second`, нужно обратиться к `Second.__bases__`. Атрибут `__superclass__` не существует в Python и вызовет ошибку. Атрибут `__dict__` содержит пространство имён класса, но не предоставляет информацию о базовых классах. Таким образом, верный способ — использовать `Second.__bases__`.
Код выведет 'Bob', потому что res — это класс, и ему присваивается атрибут name на уровне класса (res.name = 'Bob'). Затем создаётся экземпляр x = res(), у которого нет собственного атрибута name. При вызове x.name интерпретатор ищет атрибут сначала в экземпляре x, затем в его классе res. Поскольку у res есть атрибут name, возвращается 'Bob'. Это пример наследования атрибутов экземпляром от класса.