我想知道从程序员的角度来看字符串类型不变的好处。技术优势(在编译器/语言方面)可以概括为,如果类型是不可变的,则更容易进行优化。阅读here以获得相关问题。同样,在可变的字符串类型中,要么您已经内置了线程安全性(然后又很难进行优化),要么您必须自己进行。无论如何,您都可以选择使用具有内置线程安全性的可变字符串类型,因此这并不是可变字符串类型的真正优势。(同样,更容易进行处理和优化以确保不可变类型上的线程安全,但这不是重点。)但是,不可变字符串类型在用法中有什么好处?某些类型不可变的意义何在?这对我来说似乎很矛盾。在C++中,如果我想使某些字符串不可变,则将其作为对函数的const引用(
我欣赏Python的一件事是它区分了可变类型和不可变类型。在开始使用Python之前,我在c中进行了一段时间的编程,我很惊讶Python可以轻松地消除指针取消引用的所有复杂性,这些复杂性让我在c中发疯。在Python中,一切都按我预期的方式工作,我很快意识到可变/不可变的区别在其中起着重要作用。当然还有一些问题(可变函数参数默认是一个值得注意的例子),但总的来说,我觉得可变/不可变的区别极大地阐明了变量及其值是什么的问题以及他们应该如何表现。但它从何而来?我不得不假设GvR不是第一个想到这种区别的人,Python也不是第一个使用它的语言。我有兴趣了解使用此概念的早期语言,以及有关它的任
我欣赏Python的一件事是它区分了可变类型和不可变类型。在开始使用Python之前,我在c中进行了一段时间的编程,我很惊讶Python可以轻松地消除指针取消引用的所有复杂性,这些复杂性让我在c中发疯。在Python中,一切都按我预期的方式工作,我很快意识到可变/不可变的区别在其中起着重要作用。当然还有一些问题(可变函数参数默认是一个值得注意的例子),但总的来说,我觉得可变/不可变的区别极大地阐明了变量及其值是什么的问题以及他们应该如何表现。但它从何而来?我不得不假设GvR不是第一个想到这种区别的人,Python也不是第一个使用它的语言。我有兴趣了解使用此概念的早期语言,以及有关它的任
假设我想为car、tractor和boat创建一个类。所有这些类都有一个engine实例,我想在一个列表中跟踪所有引擎。如果我正确理解电机对象是否可变,我可以将其存储为car的属性以及列表中的相同实例。我无法找到任何关于用户定义的类是否可变的可靠信息,如果在定义它们时可以选择,任何人都可以解释一下吗? 最佳答案 用户类被认为是可变的。Python没有(绝对)私有(private)属性,因此您始终可以通过进入内部来更改类。要将您的类用作dict中的键或将它们存储在set中,您可以定义.__hash__()method和.__eq__(
假设我想为car、tractor和boat创建一个类。所有这些类都有一个engine实例,我想在一个列表中跟踪所有引擎。如果我正确理解电机对象是否可变,我可以将其存储为car的属性以及列表中的相同实例。我无法找到任何关于用户定义的类是否可变的可靠信息,如果在定义它们时可以选择,任何人都可以解释一下吗? 最佳答案 用户类被认为是可变的。Python没有(绝对)私有(private)属性,因此您始终可以通过进入内部来更改类。要将您的类用作dict中的键或将它们存储在set中,您可以定义.__hash__()method和.__eq__(
让Python字符串不可变的设计原因是什么?它如何让编程变得更容易?我习惯于可变字符串,比如C语言中的字符串。如果没有可变字符串,我应该如何编程?有什么最佳做法吗? 最佳答案 当您收到一个字符串时,您会确保它保持不变。假设您使用字符串参数构造如下Foo,然后修改字符串;那么Foo的名字会突然改变:classFoo(object):def__init__(self,name):self.name=namename="Hello"foo=Foo(name)name[0]="J"对于可变字符串,您必须一直进行复制以防止坏事发生。它还允许单
让Python字符串不可变的设计原因是什么?它如何让编程变得更容易?我习惯于可变字符串,比如C语言中的字符串。如果没有可变字符串,我应该如何编程?有什么最佳做法吗? 最佳答案 当您收到一个字符串时,您会确保它保持不变。假设您使用字符串参数构造如下Foo,然后修改字符串;那么Foo的名字会突然改变:classFoo(object):def__init__(self,name):self.name=namename="Hello"foo=Foo(name)name[0]="J"对于可变字符串,您必须一直进行复制以防止坏事发生。它还允许单
我不确定为什么字符串和元组是不可变的;使它们不可变的优点和缺点是什么? 最佳答案 想象一种名为FakeMutablePython的语言,您可以在其中使用列表赋值等方式更改字符串(例如mystr[0]='a')a="abc"这会在内存地址0x1中创建一个条目,其中包含“abc”,以及指向它的标识符a。现在,说你愿意..b=a这将创建标识符b并将其指向相同的内存地址0x1现在,如果字符串是可变的,并且您更改b:b[0]='z'这会将存储在0x1的字符串的第一个字节更改为z..由于标识符a指向此处,因此该字符串也会更改,因此..print
我不确定为什么字符串和元组是不可变的;使它们不可变的优点和缺点是什么? 最佳答案 想象一种名为FakeMutablePython的语言,您可以在其中使用列表赋值等方式更改字符串(例如mystr[0]='a')a="abc"这会在内存地址0x1中创建一个条目,其中包含“abc”,以及指向它的标识符a。现在,说你愿意..b=a这将创建标识符b并将其指向相同的内存地址0x1现在,如果字符串是可变的,并且您更改b:b[0]='z'这会将存储在0x1的字符串的第一个字节更改为z..由于标识符a指向此处,因此该字符串也会更改,因此..print
python有不可变的列表吗?假设我希望有一个有序的元素集合的功能,但我想保证不会改变,如何实现?列表是有序的,但它们可以改变。 最佳答案 是的。它被称为tuple。所以,[1,2]是一个list并且可以被变异,而不是(1,2)是一个tuple不能。更多信息:单元素的tuple不能通过写(1)来实例化,而是需要写(1,)。这是因为解释器对括号还有各种其他用途。您也可以完全取消括号:1,2与(1,2)相同请注意,元组完全不是不可变列表。单击此处阅读有关differencesbetweenlistsandtuples的更多信息