python学习变量赋值问题

初学编程的小伙伴都会对于深浅拷贝的用法有些疑问今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~

预备知识一——python的变量及其存储

在详细的了解python中赋值、copy和deepcopy之前,我们还是要花一点时间来了解一下python内存中变量的存储情况

在高级语言中,变量是对内存及其地址的抽象对于python而言,python的一切变量都是对象变量的存储,采用了引用语义的方式存储的只是一个变量的值所在的内存地址,而不是这个变量的只本身

我們来看一张简单易懂的图理解一下python的引用语义和C语言值语义在内存中的存储情况,左右两个图分别表示了python中变量存储与C语言中变量存储區别:

预备知识二——各基本数据类型的地址存储及改变情况

在python中的数据类型包括:bool、int、long、float、str、set、list、tuple、dict等等。我们可以大致将这些数据类型归类为简单数据类型和复杂的数据结构

我的划分标准是,如果一个数据类型可以将其他的数据类型作为自己的元素,我就认为这是┅种数据结构数据结构的分类有很多种,但是在Python中常用的只有集合、序列和映射三种结构对应python中的set、list(tuple、str)、dict;常用的数据类型有int、long、float、bool、str等类型。(其中str类型比较特别,因为从C语言的角度来说str其实是一个char的集合,但是这与本文的关联不大所以我们暂时不谈这个问题)

由于python中的变量都是采用的引用语义,数据结构可以包含基础数据类型导致了在python中数据的存储是下图这种情况,每个变量中都存储了这個变量的地址而不是值本身;对于复杂的数据结构来说,里面的存储的也只只是每个元素的地址而已:

?著作权归作者所有:来自51CTO博客莋者alex3714的原创作品,如需转载请注明出处,否则将追究法律责任

python 学习笔记- 变量赋值相关专题套餐┅起买更划算

我要回帖

 

随机推荐