python函数的参数调用前后id的分析

python函数传递参数其id不会发生变化,但数如果参数在函数中的id发生了变化,那么这样的值变化就不会影响函数之外的参数值的变化!


import torch
def a (x):
    print("改变前x的id",id(x))
    x.requires_grad = False
    print("改编后x的id",id(x))


def b (x):
    print("在函数中")
    print("改变前x的id",id(x))
    x = True
    print("改变后x的id",id(x))


ss = torch.tensor(100.,requires_grad = True)
print("改变前id(ss) = "+str(id(ss)))
a(ss)
print("改变后id(ss) = "+str(id(ss)))
print(ss.requires_grad)

print("改变前id(ss.requires_grad) = "+str(id(ss.requires_grad)))
b(ss.requires_grad)
print("改变后id(ss.requires_grad) = "+str(id(ss.requires_grad)))
print(ss.requires_grad)

hafjk = [1,4,2,3]
def c(x):
    x.append(7)

c(hafjk)
print(hafjk)


输出结果如下:
改变前id(ss) = 140471637589272
改变前x的id 140471637589272
改编后x的id 140471637589272
改变后id(ss) = 140471637589272
False
改变前id(ss.requires_grad) = 94302852516288
在函数中
改变前x的id 94302852516288
改变后x的id 94302852516320
改变后id(ss.requires_grad) = 94302852516288
False
[1, 4, 2, 3, 7]

可以看到函数中
传入参数时实参和型参的id是一致的,如果我们直接改变型参的值而不是改变型参属性值那么型参的id会发生变化,进而改变不会影响到原来的参数,但是如果我么改变的是型参的属性,那么型参的id是不会发生变化的,这样改变就会保留。

对于变量值为数字、元组、字符串,如果进行更改就会改变变量的id,所以通过函数的型参是没有办法改变他们的,但是如果变量是列表、字典等,我们可以通过类似于修改属性的方法,如存在列表a,利用列表中函数a.append(元素),而不修改列表a本身导致列表a的id不变来使得函数可以通过函数的参数传递来修改a。

这里给出更加详细的解释链接,这篇文章的解释观点与我不同!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值