本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。
问题描述
在python中一个变量可以说是内存中一个对象的‘标签’或者‘引用’。
解决方案
假设现在有一个变量a。
a=1 |
a是指向了内存中的一个int型对象,a相当于一个指向该对象的标签,如果给a重新赋值:a=7
那么a将会移动,指向另一个int型对象。原来的对象a当没有任何标签或者引用指向它时,会被自动释放。
所以在python中,变量不用定义类型,也可以说是没有类型,类型是属于对象的而不是变量的,这就和java、c、c++等语言有很大的不同,在这些语言中要先声明变量类型,并且指定类型的变量只能放入该类型的内容。
因此,在python中,对对象的赋值都是对象的引用地址的传递(变量传递是传引用而不是传值)。
b=1 a=b a is b #返回True |
a和b都指向同一个内存地址,反过来说该内存地址有两个标签,修改其中一个的变量的值将会引起另一个变量值的变