Discuss / Python / 如有错误,还望纠正,别喷别喷!!!

如有错误,还望纠正,别喷别喷!!!

Topic source

回答一下评论里的    “请问为什么说字符串a为变量还指向对象‘abc’呢?这样a不是一个指针了吗?实际上a并不是一个指针呀”   这个问题。

这里肯定是因为学了c,然后把c的指针拿到这里来了。这里是为了方便描述,所以廖老师的图画了箭头。有箭头指向并不代表是指针,而c中的指针为了方便描述,就用了箭头指向去描述。其实任何一门语言定义一个变量,其实就是向内存申请一定空间进行值的存储。

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

上面代码从内存角度去理解的话:

1、执行第一行。向内存申请一定空间去存储'abc',这个内存空间的标识符是a,也就是变量名。变量名的作用就是为了方便程序员处理,否则只能像汇编时代那样,通过机器地址去进行数据的调取真正的数据对象'abc',而机器地址很复杂不方便;

2、执行第二行。当调用repalce方法时,系统检测到a是一个不可变对象,故会自动开辟一个新的空间去存储replace的返回结果('Abc'),只不过上面的代码中,并未对新的存储空间进行一个标识符的表明,即未取变量名。如果按照如下代码:

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

此时相当于对于新的存储空间进行了一个标识,去了一个别名叫'b',而程序员可以通过'b'对此内存空间进行相应操作。

3、而由于是生成的新的存储空间,去存储'Abc',原来存储'abc'的内存空间标识符仍然是'a',故再次打印'a',结果仍然不变。

关于变量、变量名、内存分区之类的,可以去看我写的一篇总结,看了挺多帖子合在一起的https://blog.csdn.net/qq_40967086/article/details/107098717?spm=1001.2014.3001.5501


  • 1

Reply