python中的可变数据类型有列表和元组,为什么我们需要Python(或任何不可变数据类型)中的元组?...

我总是发现对于同一基本数据结构(数组)具有两种完全不同的类型是不方便的, 但是实际上这并不是真正的问题。(每种语言都有其缺点, 包括Python, 但这并不是那么重要。)

为什么有人会关心变量在内存中的位置是否与最初分配时不同? 在Python中似乎非常重视此不变性问题。

这是两件事。易失性与其在内存中的存储位置无关。这意味着它指向的物料

无法更改。

创建后, 无论对象是否可变, 都无法更改其位置。(更确切地说, id()值不能更改, 实际上是相同的。)可变对象的内部存储可以更改, 但这是一个隐藏的实现细节。

>>> x='hello'

>>> id(x)

1234567

>>> x='good bye'

>>> id(x)

5432167

这不会修改(更改)变量; 它将创建一个具有相同名称的新变量, 并丢弃旧变量。与更改操作比较:

>>> a = [1,2,3]

>>> id(a)

3084599212L

>>> a[1] = 5

>>> a

[1, 5, 3]

>>> id(a)

3084599212L

正如其他人指出的那样, 这允许将数组用作字典和其他要求不变性的数据结构的键。

注意, 字典的键不必完全不变。用作密钥的部分应保持不变; 对于某些目的, 这是一个重要的区别。例如, 您可能有一个代表用户的类, 该类将唯一用户名与哈希值的相等性进行比较。然后, 您可以将其他变量数据附加到类用户已登录, 依此类推。由于这不会影响相等性或哈希, 因此可以将其用作字典中的键是完全可以接受的。这在Python中并不经常需要; 我只是指出这一点, 因为有几个人争辩说密钥应该是不可变的, 这只是部分正确的。但是, 我在C++映射和收集中使用了很多次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值