a[1] is faster than a.get(1) because:
1) a[1] uses direct element access via BINARY_SUBSCR which is faster than a function call.
2) a.get(1) must unpack arguments, call multiple functions, and ultimately call dict_get() which introduces overhead compared to direct element access.
3) a.__getitem__(1) also uses a function call but calls the faster dict_subscript instead of dict_get(), so it is faster than a.get(1) but slower than direct element access with a[1].