Yup! Alternatively you can turn the outer dimension a Tuple container:
tuple(n*[0] for _ in range(m))
But notice the literal 1 you’re using is immutable.
That’s why it’s a good candidate for filling up the entire container.
Otherwise, something mutable like a PVector would cause the same shallow-copy mirror-change bug:
tuple(n*[PVector()] for _ in range(m))