我需要在Fortran(90)中深度复制一个(真实)数组,但我不确定如何获得它,因为我并不完全理解引用的工作原理。直觉上,我希望这样做可以得到我想要的结果:
do i=1,n
b(i) = a(i)
end do
最近有人指出对我说,b(1:n) = a(1:n)
与上面的代码等效。 直觉上,我会认为b(1:n) = a(1:n)
仅仅是将b(1:n)
的引用指向内存中a(1:n)
的位置。
b(1:n) = a(1:n)
是深拷贝吗? 为什么? 在底层引用方面发生了什么,与b = a
不同?
a = b
将自动将a
重新分配为与b
相同的大小。这需要检查它们是否符合规格,但对于b(1:n) = a(1:n)
则无需进行此操作,因为不会发生任何重新分配。 - Vladimir F Героям слава