Big-O notation can be tricky because it hides details. Big-O describes a way to measure a function related to complexity. That function may be "number of memory accesses," which would explain the O(1) complexity. However, if you were on a machine supporting large heterogenous memory spaces, that may hide a complexity that you cared about. For example, on a NUMA supercomputer, with hypercube interconnects, we find that array access requires O(log n) network transactions, even though it's only O(1) memory accesses. This is because each memory access may requires some logarithmic number of steps to reach the node that has that memory.
It is up to the developer/theorist doing the work to determine whether any given metric is the "right" metric for the problem. And it can be easy to get them wrong.
In your specific case, I would assume that I have an oracle that can de reference a memory address to its value, and measure how many oracle accesses I need to do any given operation. I like using oracles like this because they're a big honkin' red flag. They encourage scrutiny. The question of "is this measuring what I want to measure" comes naturally from their use. And, in many circumstances, we find that this model is acceptable for most architectures. In particular, if you have more than 18 exabytes of memory (at which point the 64-bit addressing model falls apart), you should question this assumption. Under that number, its a reasonable model, especially when we recognize how much of it is handled in parallel by the hardware and electromagnetic physics.
Remember that Big-O is an asymptotic complexity number, measuring behavior as your values approach infinity. You will never actually operate on machines with infinite memory space, nor infinite processing time. In the practical world, we use it as a surrogate for measuring the actual complexity as actual complexity can be nefariously difficult to compute.
I recommend anyone who has gotten the basics of Big-O and wonders about the dark corners of its assumptions to look at matrix multiplication. There's a rather obvious $\Theta(n^3)$ algorithm that's pretty easy to get to, but there are faster ones. Strassen's algorithm reaches $O(n^{\log_2 7}) \approx O(n^{2.807})$. There are even faster algorithms, in theory. However we start to find that the Big-O notation lies for our smaller finite problems. The time constants on the faster algorithms are hard to stomach, so it is rare to find anything faster than Strassen's is value-added.
But, for many many algorithms, Big-O does a good job of describing things. For lots of things, its very obvious that a $O(n^2)$ algorithm is notably slower than a $O(n \log n)$ algorithm for reasonably sized $n$. Often no more than a thousand is needed. We rarely push the limits of the size of our integers, except perhaps once per generation.
But, when you get to the big numbers, it is indeed worth revisiting the notation, and asking whether it is really measuring what you seek.