Discuss / Python / 我有一个问题

我有一个问题

Topic source

>>> a = 'abc'

>>> a.replace('a','A')

'Abc'

如果不用b变量取出a.replace('a','A')的值,这个值会返回到哪里呢,就储存到a.replace('a','A')这里对吗

>>> b=a.replace('a','A')

>>> b

'Abc'

我觉得是 计算机内存

我也刚接触python,我觉得这个是python的一个有意思的地方。没专业编程基础,只说说想法。

和C、C++等语言不同的是,python是一个解释型的语言,特点就是你输入了一个语句,Python的环境立即会根据你的语句执行一个命令:

  • 如果你输入的是一个赋值语句,python可能会创建一个变量,并且按你的要求赋值。
  • 如果你输入的是一个变量,python理解你可能想知道这个变量的值是什么,它会把这个变量所指代的值在下一行显示出来。
  • 如果你输入了一个算式,python认为你想计算这个算式,它会尝试把这个算式算出来,并给你一个结果,比如输入100+200(不用print()),会直接返回300。

我不知道python里怎么定义,这行为在Cpython这样类似命令行环境里通常叫“回显”,我们下面就用回显指代python环境的这一行为。

所以当你输入a.replace('a','A')的时候,python认为你输入了一个数据/算式,他会先计算这个结果,然后回显。

看到这里,其实可以看出,输入“a.replace('a','A')”和输入100+200之后回显的过程没什么本质区别(可能前者在缓存,后者在内存?),因此你的问题扩大的到一个更宽泛的问题里了,就是你在python环境里输入的算式一类的指令,这些数据去哪儿了?

答案肯定是在内存里(这基本是废话),关键是由于解释性语言的特点,这个内存在你不引用的情况下不会直接暴露给你,而是在由解释器管理,当你看到Abc这个回显的时候,在解释器的管理之下,几个用于计算的中间过程和存储结果的临时性占用的内存可能已经被“回收”了。

在编程中有很多这种用完了就不再用的内存,以及计算过程中占用的临时内存,都是python帮你管理起来的,省事儿。

个人想法,请大家多指点。

这里还是replace()函数的用法和我们想的不一样:replace()方法不能改变原始字符串,替换出来的字符串为内存新建字符串,并未改变原始变量指针。

所以a的指向内容没变,还是'abc';也有留言里把a指向变了,也就是a = a.replace('a','A')。

个人理解a.replace('a','A')的值应该是存在内存当中,由于没有a.replace('a','A')的引用,被python的垃圾回收机制清除了。

因为没有任何变量指向这个新建的字符串,因而没有任何办法可以访问到它,所以你可以认为它被直接丢弃了。


  • 1

Reply