为什么改变我的变量值不影响我的列表?

我不明白为什么我的列表不改变变量值。

b = 3
a = [1, 2, b]
b = 10
print(a)

b的值仍然是3,因为我打印它。为什么不是10?

解决方案:

要想深刻理解这个问题,你真的要学习C语言这个创造python的编程语言,以及指针的工作原理。

首先要注意的是,如果你写。

b = <stuff>
a = [1,2,b]
b = <other thing> 

那么不管怎样,”b “这个变量已经被重新使用了。无论你在 “a “中放入什么,都会留在 “a “中,在 “a “被创建的时候。”b “就会被改成另一个值。Python 用 “b “制作了 “a”,但 python 并没有记录 “b “这个变量被使用了,它只保留了 “b “制作 “a “时的值。

现在,如果 “b “是一个可突变的变量 (我们可以在内存中更新而不需要创建一个副本),并且我们没有覆盖 “b”,而是突变了 “b”,那么 “a “将收到这个突变值。那么 “a “就会收到 “b “的突变,因为 “a “将存储 “b “的地址,而不是 “b “的副本。例如:”a “会收到 “b “的地址,而不是 “b “的副本。

b = [1,2,3]
a = [1,2,b]
print(a)
b.append(4)
print(a)

出现这种情况是因为 “b “不是一个不可变的整数(只能复制),而是一个可变的列表(可以在内存中更新而不需要复制)。然后,我们对 “b “进行了不复制列表的.append()操作。这意味着 “a “接收到的内存地址已经更新,当你在 “a “中查找时,它返回的是当前的内存地址。

如果你想检查python变量的内存地址是否相同,那么就使用python内置的 “is”。比如说

17 is 16+1
[1,2,3] is [1,2,3]

这说明python在内存中只有一个17(在任何时候,永远只有一个17),17和16+1都指向同一个内存整数,一个不可改变的整数,在内存中只存在一次。然而,创建的两个列表(尽管它们看起来一样,数字也一样)被写入了两个不同的内存地址。

给TA打赏
共{{data.count}}人
人已打赏
未分类

在c#控制台应用程序中记录用户输入以及控制台输出。

2022-9-8 21:05:20

未分类

'Amazon.Runtime.Internal.FallbackInternalConfigurationFactory'引发了一个异常。

2022-9-8 21:05:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索