You can also see this if you take a look at the bytecode that is generated. Here the part with x = []
import dis
print("Example with x = []")
s1 = """
x = [1,2,3]
x = []
"""
dis.dis(s1)
which outputs
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
we can see that two lists are build since we have two BUILD_LIST. Now if we take a look at x.clear()
print("Exmaple with x.clear()")
s2 = """
x = [1,2,3]
x.clear()
"""
dis.dis(s2)
we get the following output
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
and here only one list is build and clear is called and LOAD_CONST is used to place None onto the stack as with the initial values 1,2,3.