likes
comments
collection
share

趣玩python-中秋特别篇-可变不可变类型大家好呀!今天是中秋节,程序员们都该放假赏月了!可 List 和 Tuple

作者站长头像
站长
· 阅读数 15

开篇

(舞台上布满中秋节的灯笼,天空中映着一轮明月,List 手拿一盘月饼,兴奋地跑上台;Tuple 悠然地看着天上的圆月,缓步走上。)

歪小王: 哈哈哈!大家好呀!今天是中秋节,程序员们都该放假赏月了!可 List 和 Tuple 不放过任何机会,赶在团圆时刻跟大家聊聊“可变类型”和“不可变类型”。所以,今天我们就来聊聊 Python 里的这些“类型”吧!

基本概念

List: 我可是 Python 中的 可变类型 代表,意味着我可以随时修改、添加、删除元素。想换个味道的月饼?没问题,我可以给你!比如,来看这个例子:

mooncakes = ["豆沙", "莲蓉", "五仁"]
mooncakes[0] = "蛋黄"
print(mooncakes)  # 输出: ['蛋黄', '莲蓉', '五仁']

你看!豆沙月饼一秒变成了蛋黄的,我就是这么灵活!

Tuple: 不要那么激动,我可是代表着 不可变类型,也就是一旦我定义了某个元素,那它就不能随意改变了。中秋的圆月不可被打破,而我,也不能轻易改变。比如:

mooncake_types = ("豆沙", "莲蓉", "五仁")
# 如果尝试修改会报错
# mooncake_types[0] = "蛋黄"  # 会报错:TypeError

歪小王: 哦,这就像固定的传统仪式一样,有些东西不能改!可变和不可变类型就是如此,不同场景下有各自的用武之地。

字符串的中秋寓意

List: 让我来问你,str 是可变的吗?

Tuple: 当然不是,str 和我 Tuple 一样,都是不可变的。

List: 没错!尽管我们可以随意创造新的字符串,但我们不能直接修改它。

greeting = "中秋快乐"
# greeting[0] = "国"  # 错误,字符串不可变

如果你想改变字符串,只能通过 拼接创建新字符串 的方式,比如:

greeting = "中秋快乐"
new_greeting = "国" + greeting[1:]
print(new_greeting)  # 输出: 国秋快乐

Tuple: 就像中秋的习俗不会轻易改变一样,str 的不可变特性保证了它的稳定性。

可变和不可变类型的区别

歪小王: 那我们来深入聊聊,可变类型和不可变类型的核心区别是什么呢?

List: 可变类型的核心特点就是它们的内容可以在原地修改,不用创建新的对象。比如列表:

mooncakes = ["豆沙", "莲蓉", "五仁"]
print(id(mooncakes))  # 打印列表的内存地址

mooncakes.append("枣泥")
print(id(mooncakes))  # 内存地址不变

你看,我在列表中增加了一个新的元素,但内存地址没变,这就是可变类型的好处。

Tuple: 而我这样的不可变类型,一旦被创建,我的内容就不能修改。你每次修改我的时候,其实是创建了一个全新的对象:

t = (1, 2, 3)
print(id(t))  # 查看元组的内存地址

t = (1, 2, 3, 4)  # 尝试修改元组
print(id(t))  # 内存地址发生变化

实际应用

歪小王: 那么在实际开发中,什么时候用可变类型?什么时候用不可变类型呢?

List: 当你需要频繁地修改、添加或者删除数据时,可变类型是最好的选择。比如在管理订单、动态数据处理时,我 List 是最合适的:

orders = ["订单1", "订单2", "订单3"]
orders.append("订单4")  # 可以轻松添加新订单
print(orders)  # 输出: ['订单1', '订单2', '订单3', '订单4']

Tuple: 如果你需要保护数据不被修改,不可变类型就很有用了。比如在保存一些常量或重要的配置信息时,使用 Tuple 更加安全:

PI = (3.14159,)

当你不希望代码中的这些数据被其他人或者其他地方意外修改时,Tuple 能够很好地提供这种保护。

总结

Tuple: 可变与不可变的世界,像中秋的月饼口味各异,每个人有每个人的喜好,而我们的设计正是为了不同场景下的需求。

List: 对啊!虽然我能随意修改,但你看,我可不会随便篡改元组或字符串,不然就乱套了!保持灵活的同时,稳定性也很重要。

歪小王: 说得好!今天是中秋,两位老师还有什么还想跟朋友们说的吗?

Tuple: 放假团圆,代码就像月亮一样暂时放在那儿,明天再说吧。

List: 中秋快乐,敲代码的朋友们,别忘了享受放假和团圆的美好时光!

歪小王: 大家中秋节快乐!今天的特别节目到这里,我们下期再见!

转载自:https://juejin.cn/post/7414733286565724160
评论
请登录