三、python对字符串和集合的内存垃圾回收机制

变量声明:
name1 = "andy"
name2 = name1
 
这个时候我把name1的值给改成了“tom”,问现在name2的值是什么?为什么?
答:andy,因为你把name1的值改了相当于你将name1指向了一个新的叫做tom的内存地址,但name2仍然指向旧的andy的内存地址(字符串)。java和c#同理
如下
>>> name1 = "andy"
>>> name2 = name1
>>> id(name1)
47729824
>>> id(name2)
47729824
>>> name1 = "tom"
>>> id(name1)
47894176
>>> id(name2)
47729824

 

 
但是如果name1的值是一个集合的话,那么情况就是相反的,即它还是在原来的内存地址上做更改,如果name1的值发生了变化,name2的值也会跟着变
>>> name_list = ["rooney","linda","ramos"]
>>> id(name_list)
46820168
>>> name_list.append('pique')
>>> id(name_list)
46820168

 

 
总结:
对于字符串的更改:不是说你是在原来字符串指定的内存地址上更改,而是新开了一个内存地址来存储更改的字符串。
如:andy改成tom,不是在原来andy指向的内存地址更改,而是新增了一个内存地址存放
对于列表的更改:是在原来列表指定的内存地址上更改
 
 
posted @ 2019-08-09 19:57  Paco_Pig  阅读(476)  评论(0编辑  收藏  举报