为什么 python 字符串不是列表的子类?



老实说,这对我来说非常奇怪。我学习python才几天,但在某些情况下,列表和字符串被区别对待,尤其是字符串是不可变的,这让我忍不住感到奇怪。这样做是因为python中没有真正的字符对象,所以字符串不能被视为字符列表吗?我可能在胡言乱语,但我仍然希望有一个更了解情况的人能让我对这一点有更多的了解。

字符串是不可变的,这是一个性能问题。这允许进行很好的优化,这很好,因为字符串被大量使用。

顺便说一句,如果你愿意的话,你也可以有字符列表,所以用这种方式同时拥有可变和不可变的字符串是很容易的。然而,如果字符串实际上是字符列表,那么在python中就很难确定当前的字符串是什么,这意味着拥有可变的字符串很容易,但拥有不可变的字符串却很难。

正如一条评论所指出的,这种不变性是字符串不是列表的子类的原因。

另一个原因是python中的list类不表示任何顺序类型,而在其他语言中通常称为动态数组。例如,函数式编程语言通常调用链表list。这意味着不仅仅因为str可以被视为序列类型,它还应该继承list。然而,这仍然是真的:strlist一样,可以被视为一种序列类型,这就是为什么它是iterable。在Python中,这种接口不支持子类化,而只支持鸭子类型,因此str不需要从任何iterable超类继承即可成为一个超类(特别是,它不需要从list继承(。

最新更新