1、Numpy共享内存的情况:
array1 = np.array([1, 2, 3])
array2 = array1
array2[0] = 0 # array1也会跟着改变,就地操作
array2 = array2 * 2 # array2不会跟着改变,属于非就地操作,会创建一个新的地址给array2
array2 = array1[:]
array2 = array1.view()
array2 = array1.reshape((3, 1))
使用array.copy()
创建深拷贝以避免这种问题
非就地操作:会创建一个新的数组,并将其赋值给 array2(指向的地址发生改变)。在这种情况下,array2 将引用一个新的数组,原来的 array2 不再共享原始的内存。如下,都不会影响到array1:
array2 = -array1 # 有运算时不共享(会创建一个新的数组给array2)
array2[0] = 0 # array1不会跟着改变
array2 = array1 # 共享内存
array2 = array2 + 1 # array1不会改变(此时创建一个新的数组给array2)。但array2 += 1会影响array1,自增是就地(in-place)操作
array2 = array1
array2[0] = -array2[0] # 就地操作,1会改
array2[:] = -array2[:] # 就地操作,1会改
array2 = -array2 # 非就地操作,1不改
2、pytorch共享内存的情况:
和Numpy完全一样
tensor1 = torch.tensor([1, 2,