Same six numbers, two memory layouts. A Python list holds pointers to objects scattered elsewhere; a NumPy array packs the raw values back-to-back. Watch what reading them costs.
python list — pointers to boxed objects
↓ each slot points off to a separate object, somewhere in memory
numpy array (int64) — one packed block
↓ values sit back-to-back; reading them is one straight sweep
The speed is not magic: packed + single-type means a predictable stride and no per-element object to unpack — so the array walks straight through memory, while the list chases a pointer to a random address for every single value.