python输入学生成绩、分a、b、c类_在Python中,如果输入a=1b=2c=acc=b,那么c的值是多少?c指的是什么?...

Python中没有指向变量的指针。尤其是,当你这样说的时候:Is the statement replacing the pointer c -> a with pointer c -> b...

Python没有“指针c -> a”这样的东西,所以它没有这样做。在...or grabbing the value from b and overwriting a with b's value

但是没有赋值给a,所以它也没有这样做。在

相反,Python保留了一个符号表1,它将每个名称(a、b、c等)映射到指向对象的指针。在您的代码示例中,在分配给a和b之后,它将如下所示(显然,我已经组成了内存地址):a -> 0xfffa9600 -> 1

b -> 0xfffa9608 -> 2

然后在指定c = a之后,它将如下所示:

^{pr2}$

注意,c完全独立于a。运行c = b时,它将符号表中与c关联的指针替换为与b关联的指针,但a不受影响:a -> 0xfffa9600 -> 1

b -> 0xfffa9608 -> 2

c -> 0xfffa9608 -> 2

在本例中,这几乎就是它的全部,因为所讨论的对象,即整数常量1和{},是不可变的。但是,如果使用可变对象,它们的行为会变得更像指针,因为当对象存储在一个变量中时,对象的更改会反映在引用同一对象的其他变量中。例如,考虑以下代码示例:x = {'a': 1, 'b': 2}

y = x

在这里,符号表可能如下所示:x -> 0xffdc1040 -> {'a': 1, 'b': 2}

y -> 0xffdc1040 -> {'a': 1, 'b': 2}

如果你现在跑y['b'] = y['a']

然后它实际上不会更改符号表中与y关联的指针,但它确实更改了该指针指向的对象,因此您最终得到x -> 0xffdc1040 -> {'a': 1, 'b': 1}

y -> 0xffdc1040 -> {'a': 1, 'b': 1}

您将看到您对y['b']的赋值也影响了x。把这个和y = {'a': 1, 'b': 2}

这实际上使y指向一个完全不同的对象,并且更类似于您之前使用a、b和{}所做的操作。在

1实际上有几个符号表,对应于不同的范围,Python有检查它们的顺序,但是这个细节在这里并不特别相关。在

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值