>>> import numpy
>>> import pandas as pd, numpy as np
>>> data = numpy.random.rand(10_000_000, 2)
>>> df = pd.DataFrame(data, copy=True)
>>> %timeit df.sum()
164 ms ± 1.12 ms per loop 
>>> df2 = df.copy()
>>> %timeit df2.sum()
13.2 ms ± 48.3 µs per loop 

I'd expect pandas to align the ndarray internally the same way in these two cases and IMO the problem is in the constructor copy.

xref #50756, where the similar issue pd.DataFrame(data, copy=None) is discussed.