У 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'
Отлично. Давайте посмотрим, что произойдет, если мы удалим весь математический пакет:
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 был удален специально, даже после того, как мы удалили весь пакет math и снова импортировали его.
Где python хранит эти знания? Можем ли мы получить к нему доступ? Можем ли мы изменить это?
math.cos
после ее удаления. - person Graipher   schedule 16.02.2018