Вы также можете увидеть это, если взгляните на сгенерированный байт-код.Здесь часть с x = []
import dis
print("Exmaple with x = []")
s1 = """
x = [1,2,3]
x = []
"""
dis.dis(s1)
, которая выводит
Exmaple with x = []
2 0 LOAD_CONST 0 (1)
2 LOAD_CONST 1 (2)
4 LOAD_CONST 2 (3)
6 BUILD_LIST 3
8 STORE_NAME 0 (x)
3 10 BUILD_LIST 0
12 STORE_NAME 0 (x)
14 LOAD_CONST 3 (None)
16 RETURN_VALUE
, мы можем видеть, что два списка построены, так как у нас есть два BUILD_LIST
.Теперь, если мы посмотрим на x.clear()
print("Exmaple with x.clear()")
s2 = """
x = [1,2,3]
x.clear()
"""
dis.dis(s2)
, мы получим следующий вывод
Exmaple with x.clear()
2 0 LOAD_CONST 0 (1)
2 LOAD_CONST 1 (2)
4 LOAD_CONST 2 (3)
6 BUILD_LIST 3
8 STORE_NAME 0 (x)
3 10 LOAD_NAME 0 (x)
12 LOAD_ATTR 1 (clear)
14 CALL_FUNCTION 0
16 POP_TOP
18 LOAD_CONST 3 (None)
20 RETURN_VALUE
, и здесь только один список строится, вызывается clear и используется LOAD_CONST
поместить None
в стек как с начальными значениями 1,2,3
.