代码
import torch
import torch.nn as nn
mw_list = [nn.Linear(5, 2), nn.Linear(5, 2)]
print( id(mw_list[0]), id(mw_list[1]) )
mw_list[1] = mw_list[0]
mw_list[0] = nn.Linear(5, 2) # 感觉此处有优化 mw_list[0]又重新指向了原先mw_list[1]的地址
# mw_list[0] = deepcopy( nn.Linear(5, 2)) # 这种方式会重新创建
# mw_list[0] = deepcopy(myser)
print( id(mw_list[0]), id(mw_list[1]) )
执行结果为:
1651583140872 1651583235144
1651583235144 1651583140872
调整代码如下,发现也会存在相同情况
class A(): # 重新实验
def __init__(self):
self.p = 0
mlst = [A(), A()]
print( id(mlst[0]), id(mlst[1]) )
mlst[1] = mlst[0]
mlst[0] = A()
print( id(mlst[0]), id(mlst[1]) )
而在pythontutor执行时,不会出现这种情况
出现上述行为的解释,可能是编译器有某种缓存机制,希望有大佬指教。