Python经验主义学习之路——可变对象和不可变对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013555238/article/details/76638407

可变对象与不可变对象

数据类型和变量

Python的数据类型和C++几乎相同,但是变量的概念和C++/C目前来看有一点差别(但在汇编的角度上看,和汇编中的变量概念差不多),在C/C++中,我们可以把变量在逻辑上抽象成一个带有名字的盒子,如下简单代码。

int main(void){
    int a;
    a = 5;
    a  = 6;
}


其中a相当于一个可以存放数据的盒子,在高级的逻辑层面上,可以这么认为,在内存中创建了个叫 a 的盒子,这是盒子里是空的(任意的),之后在里面放入了5,之后又将6放入盒中,覆盖了5。但是在汇编层面上a其实是一个地址。

在Python中,变量a 就是一个名字,一个指针。该指针指向了一个对象。在Python中我目前是这样理解的一个对象是特定地址的数据,数据类型这个概念是对于变量指向的对象来说的(只有对象才有数据类型这个概念)。比如 5 这个 a指向的对象是 int类型,6这个a指向的对象是int型,而不是说 a 是int 型,a只是一个变量,只是一个指针而已。

list 和 tuple认识可变对象和不可变对象

接着上文。可变或者不可变是对于 一个内存中创建的对象来说的,一个确定的变量 有两种分类,一类为 可变对象。一类为不可变对象。不可变对象 对象占据的内存空间中的内容不可变。比如5在5的房间里永远为5,不能变6或者‘abc'。看下面的Python代码。
a = 5 ; 
a = 'abc'

a开始指向了5,之后又指向了'abc',似乎a变了,但是内存中的 5 , abc本身的内容并没有发生改变。
关于 list 和 tuple 的探讨。详见 点击打开链接
其中,list和tuple作为复合对象, l其中List为可变对象,tuple为不可变对象。list和tuple的实质是装着内存地址,说他们变或者不变实质是指向的变或者不变。但他们指向的内容变或者不变就是另一回事情了。






















猜你喜欢

转载自blog.csdn.net/u013555238/article/details/76638407
今日推荐