博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python、javascript中的不可变对象
阅读量:5924 次
发布时间:2019-06-19

本文共 616 字,大约阅读时间需要 2 分钟。

比如python中str是不变对象,而list是可变对象,javascript中str也是不变对象,而array是可变对象

python的例子:

>>> a = 'abc'>>> a.replace('a', 'A')'Abc'>>> a'abc'

  

javascript的例子:

var a = 'abc';console.log(a.replace('a', 'A'));// Abcconsole.log(a);// abc

  

虽然字符串有个replace()方法,也确实变出了'Abc',但变量a最后仍是'abc',应该怎么理解呢?

 

a本身是一个变量,它指向的对象的内容才是'abc'。

 

当我们调用a.replace('a', 'A')时,实际上调用方法replace是作用在字符串对象'abc'上的,而这个方法虽然名字叫replace,但却没有改变字符串'abc'的内容。相反,replace方法创建了一个新字符串'Abc'并返回,如果我们用变量b指向该新字符串,就容易理解了,变量a仍指向原有的字符串'abc',但变量b却指向新字符串'Abc'了。

 

所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

 

转载于:https://www.cnblogs.com/yourstars/p/8204165.html

你可能感兴趣的文章
Intent四种数据传递方式
查看>>
2018年尾总结——稳中成长
查看>>
MaxCompute 图计算开发指南
查看>>
WordPress制作
查看>>
比特币耶稣Roger Ver,是一个商人,更是一个斗士
查看>>
基础邮件原理(MUA,MTA,MDA)
查看>>
随记:使用docker搭建mysql学习环境
查看>>
Linux运维面试题
查看>>
python 乘法表
查看>>
GRPC 基于Protobuf 通信协议支持HTTP2
查看>>
第四章 ARP地址解析协议
查看>>
java+selenium自动化遇到confirm弹窗,出现NoAlertPresentException: no alert open
查看>>
SharePoint 2010 文档的访问次数
查看>>
IT工作中必备的工具
查看>>
JSON eval()和parse()方法以及stringfy()方法 作用
查看>>
Toad for MySQL 7.7 Freeware设置
查看>>
高性能的数据库一体机:Oracle Exadata
查看>>
exchange 2010 OAB的设置
查看>>
Spring自动绑定@Repsity@Service@Controller
查看>>
使用GRE使组播穿越非组播网络
查看>>