如前所述,Python数据类型可以分为:
可变(列表、字典)与不可变(数字,字符串,元组)
可迭代(列表,元组)与不可迭代
可变的数据可以直接修改而不会重新分配内存,但仅限于使用修改操作,如果创建一个同名变量再赋值肯定还是会重新分配内存的。
l1=[1,2,3]
l1=l1.append(4) #重新分配内存
l1.append(5) #不重新分配
tensor也是可变类型,如果用tensor+=1就不会改变地址,如果用tensor=tensor+1就会改变地址
#运行一些操作可能导致为结果分配新内存
y=torch.arange(6).reshape(2,3)
before=id(y)
y=y+1
print(id(y)==before)
before2=id(y)
y+=1
print(id(y)==before2)
但对于不可变类型,不管怎么操作,都一定会改变地址。
#但是 对于不可变类型(数字,元组,字符串)而言,不管什么操作都会改变地址
a=4
before=id(a)
a+=1
id(a)==before
原地操作可以减少内存开销。