del
Кажется, у меня есть память, которая меня озадачивает. См. Следующее:
In [1]: import math
In [2]: math.cos(0)
Out[2]: 1.0
In [3]: del math.cos
In [4]: math.cos(0)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-9cdcc157d079> in <module>()
----> 1 math.cos(0)
AttributeError: module 'math' has no attribute 'cos'
Fine. Посмотрим, что произойдет, если мы удалим весь математический пакет:
In [5]: del math
In [6]: math.cos(0)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-6-9cdcc157d079> in <module>()
----> 1 math.cos(0)
NameError: name 'math' is not defined
Итак, теперь сама математика ушла, как и ожидалось.
Теперь снова импортируйте математику:
In [7]: import math
In [8]: math.cos(0)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-8-9cdcc157d079> in <module>()
----> 1 math.cos(0)
AttributeError: module 'math' has no attribute 'cos'
Итак, как-то интерактивный python помнит, что math.cos был удален специально даже после того, как мы удалили весь математический пакет и снова импортировали его.
Где питон хранит эти знания? Можем ли мы получить к нему доступ? Можем ли мы изменить его?