Python-共享引用

Posted ralap7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-共享引用相关的知识,希望对你有一定的参考价值。

 A会改变么?

下面三小段代码,A的值都会改变么?

>>> A = "spam"
>>> B = A
>>> B = "shrubbery"

 

>>> A = ["spam"]
>>> B = A
>>> B[0] = "shrubbery"

 

>>> A = ["spam"]
>>> B = A[:]
>>> B[0] = "shrubbery"

 

 分析:

“python中一切都是对象”

整数也好,字符串也罢,都是对象。这里,字符串"spam"、列表["spam"]、字符串"shrubbery"都是对象,而A和B则是这里对象的引用,引用可以理解成对这个对象的地址,或者这个对象的名字。

对象又分为可变对象和不可变对象:

  • 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。
  • 可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变

Python中,数值类型(intfloat)、字符串str、元组tuple都是不可变类型。而列表list、字典dict、集合set是可变类型。


OK,有了上面的认识,我们就可以撸开袖子分析了。

工欲善其事,必先利其器。一个函数可以帮我们分析A和B是否引用的同一个对象--id(),id()函数用于获取对象的内存地址

 


以上是关于Python-共享引用的主要内容,如果未能解决你的问题,请参考以下文章

C 中的共享内存代码片段

Python中对象的引用和共享引用

零基础学python-6.2 共享引用

python多线程

Android App 在片段中创建 ListView 引用时关闭

引用向量的部分片段?