三、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指向的内存地址更改,而是新增了一个内存地址存放
对于列表的更改:是在原来列表指定的内存地址上更改