【Python】真正理解Python中的变量

运行下面这样一段代码,会输出什么呢?

person = {'name':'','id':0}
team = []

for i in range(3):
    x = person
    x['id'] = i
    team.append(x)

team[0]['name'] = 'jack'
team[1]['name'] = 'pony'
team[2]['name'] = 'ivy'

print(team[0],team[1],team[2])

如果你的结果不是{'name': 'ivy', 'id': 2} {'name': 'ivy', 'id': 2} {'name': 'ivy', 'id': 2},可以继续往下看,也许会对你有所帮助。

在某些编程语言中,变量像是一个“容器”,定义了某种类型的变量,就给你分配好这个容器,之后对变量作赋值操作,就像是往容器里装入不同的内容,但容器还是那个容器,不会变。你创建3个容器,赋给一样的值,他们也还是3个独立的容器。

然而,

在 Python 中,变量更像是一个“标签”,执行下面的代码

a = [1, 2]
b = a
a[0] = 2

print(a,b)

此时输出结果应该是[2,2],[2,2],而不是[2,2],[1,2]


在Python中,

当一个名字第一次出现在赋值语句的左边部分时,会创建对应的 Python 变量,赋值语句将名字与值关联起来,变量存的是指向数据的引用,而不是数据本身

来看下面的代码

theSum = 0
print(type(theSum))
theSum = True
print(type(theSum))

执行过后,我们会发现theSum的数据类型由整数类型–>布尔类型,赋值语句改变了变量的引用,

这体现了 Python 的动态特性,同一个变量可以指向不同类型的数据。


我们之前说变量像是一个“容器”时提到,“你创建3个容器,赋给一样的值,他们也还是3个独立的容器”。

那在 python 中,同样的值赋给不同的变量,是否就一定意味着不同的变量指向同一个引用呢?

答案是 NO! 可能一致,也能不一致。

那如果想知道是否一致呢,执行如下代码

a = -100
b = -100

c = False
if id(a) == id(b):
    c = True

print(c)

改变不同的赋值,会有不同的结果。

此时,再看最开始的例子,是否理解了呢

image-20230422013100991

参考:

  • https://zhuanlan.zhihu.com/p/90484197
  • https://zhuanlan.zhihu.com/p/20721034
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值