Python print() 打印多个变量时,可变对象和不可变对象的区别

先来看这段代码:

python 复制代码
tmp = []
print(tmp, tmp.append(1), tmp)

输出:

python 复制代码
[1] None [1]

并不是一些人认为的 [] None [1]

这是因为列表是可变对象,print()打印前会先计算出所有结果,最后再打印出来,中间在列表中添加了1,之前的 tmp 由于和之后的 tmp 是同一个列表对象,都会有1。

再来看不可变对象:

python 复制代码
a = 1

print(a, a := 2, a)

输出:

python 复制代码
1 2 2

并没有改变第一个 a 的值,这是因为不可变对象都有自己独一无二的地址,a:=2时 a 已经是 2 这个不可变对象了,和 1 已经无关了,修改 a 不会影响前面的 a。

可以理解为 print() 打印之前会确定所有待打印对象的地址,可变对象则是可变对象的地址,例如 tmp 列表的地址(至于它的内容是什么等真的打印的时候再看);不可变对象则是不可变对象的地址,例如第一个 a 的地址是 1 的地址,就确定是 1 的地址了,第三个 a 的地址是 2 的地址,就确定是 2 的地址了,最后打印的时候找到它们的地址对应的内容,仍然是 1 和 2。

最后留下一道思考题:

python 复制代码
def f():
    global x
    x = 2
    return x

x = 1
print(x, f(), x)
相关推荐
小尧嵌入式14 分钟前
C++基础语法总结
开发语言·c++·stm32·单片机·嵌入式硬件·算法
white-persist15 分钟前
【攻防世界】reverse | IgniteMe 详细题解 WP
c语言·汇编·数据结构·c++·python·算法·网络安全
霍格沃兹测试开发学社-小明15 分钟前
AI来袭:自动化测试在智能实战中的华丽转身
运维·人工智能·python·测试工具·开源
@游子18 分钟前
Python学习笔记-Day2
开发语言·python
qq_3363139319 分钟前
java基础-集合进阶
java·开发语言·windows
222you21 分钟前
MybatisPlus常用注解
java·开发语言·spring
wanderist.22 分钟前
Linux使用经验——离线运行python脚本
linux·网络·python
九千七52631 分钟前
sklearn学习(3)数据降维
人工智能·python·学习·机器学习·sklearn
你的冰西瓜32 分钟前
C++20 新特性详解:相较于 C++17 的主要改进
开发语言·c++·stl·c++20
济宁雪人42 分钟前
Java安全基础——JNI安全基础
java·开发语言