当前位置: 首页 > news >正文

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

先来看这段代码:

tmp = []
print(tmp, tmp.append(1), tmp)

输出:

[1] None [1]

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

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

再来看不可变对象:

a = 1

print(a, a := 2, a)

输出:

1 2 2

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

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

最后留下一道思考题:

def f():
    global x
    x = 2
    return x

x = 1
print(x, f(), x)

相关文章:

  • 图论入门【数据结构基础】:什么是图?如何表示图?
  • Linux IP 配置
  • 完全托管的DeepSeek-R1模型正式登陆Amazon Bedrock:安全部署与使用指南
  • 【系统架构设计师】操作系统 - 文件管理 ② ( 位示图 | 空闲区域 管理 | 位号 | 字号 )
  • Flask 模版引擎的语法
  • C语言-自定义类型:联合和枚举
  • OpnenHarmony 开源鸿蒙北向开发——1.开发环境搭建(DevEco Studio 5.03)
  • 高主频GPU+RTX4090:AI生图性能优化超150%
  • GIT标签(Tag)操作
  • Cursor与Coze结合开发电影推荐系统:一次高效的技术实践
  • 数据结构——串、数组和广义表
  • golang开发支持onlyoffice的token功能
  • 自定义uniapp组件,以picker组件为例
  • SpringBoot第三站:配置嵌入式服务器使用外置的Servlet容器
  • SQL注入第7关
  • DNS主从服务器
  • 【第K小数——可持久化权值线段树】
  • IIS 服务器日志和性能监控
  • 蓝桥杯嵌入式赛道复习笔记2(按键控制LED灯,双击按键,单击按键,长按按键)
  • element-plus中Popconfirm气泡确认框组件的使用
  • 浪尖计划再出发:万亿之城2030课题组赴九城调研万亿产业
  • A股三大股指涨跌互现:3343股收涨,两市成交超1.1万亿元
  • 城市更新·简报│中央财政支持城市更新,倾斜超大特大城市
  • 迎接八方来客:全国多地“五一”假期党政机关大院停车场免费开放
  • 国泰海通合并后首份业绩报告出炉:一季度净利润增逾391%
  • “五一”假期,又有多地将向社会开放政府机关食堂