为了账号安全,请及时绑定邮箱和手机立即绑定

Python 整数是引用类型吗?

Python 整数是引用类型吗?

慕侠2389804 2023-07-27 15:42:03
我们都知道Python中的列表是引用类型,即保存列表的变量并不直接保存列表,而是保存对其的引用。我们都知道 Python 中的一切都是对象。所以我想到的问题是,整数也是 Python 中的对象,因此保存整数的变量也将包含对整数的引用;那么为什么只有列表被归类为引用类型呢?由于Python中一切都是对象,Python中的整数不也是引用类型吗?
查看完整描述

1 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

这些概念在 Python 中并不真正适用。根据我的经验,“引用类型”和“值类型”主要用于 C# 等 .NET 语言,它们具有特定的含义 - 引用类型的变量存储对对象的引用,而值类型的变量存储值直接的对象。您无法获取对存储在变量中的对象的引用(尽管您可以创建该值的“装箱”副本并获取对该框的引用)。这些术语可以在其他语言中类比使用 - 但例如,在 Java 中,所有类都是 .NET 所认为的“引用类型”,只有基元的行为与 .NET 中的“值类型”相同,因此这些术语实际上并不存在有必要的。那么让我们回到Python。

如果我们使用 .NET 的含义,那么是的,所有 Python 类型实际上都是“引用”类型,因为每个变量都是对对象的引用*,并且这样做a = ba引用与 .NET 相同的对象b。然而,关于“引用类型”和“值类型”的问题是,当一个对象是不可变的时,它是引用类型还是值类型就不再重要了。您不能做一件重要的事情 - 您不能有对同一对象的两个引用,通过其中一个修改该对象,然后当另一个更改时感到惊讶!

这是一种冗长的说法,当人们在 Python 中将整数称为“值类型”时,他们可能会从 C# 或 Java 的角度来思考它们,并观察到它们的行为与 C# 或基元中的值类型非常相似。用 Java 做,因为他们做!但这实际上是因为它们比其他任何东西都更不可变。


* 这里我使用的“引用”比 C# 中的特定含义更普遍。一般意义上是某种指定特定对象的句柄、地址或标识符,这样我们就可以拥有对单个对象的许多“引用”。“引用”和“指针”都是通用术语,在某些语言中可能具有更具体的含义。例如,C# 引用与 Java 引用的概念非常相似,但与 C++ 引用却截然不同。在某些语言中,“指针”具体是一个可以用算术操作的数字内存地址,在其他语言中,它与我描述的“引用”的一般含义没有区别。


查看完整回答
反对 回复 2023-07-27
  • 1 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信