① 数据类型的分类
1.可变类型 list dict 会在原来的内存地址上修改元素 拷贝之后改变的元素不会牵扯 改变原来的元素,deepcopy深拷贝会将深层次的内容均复制过来
2. 不可变类型 int str tuple long 不会在原来的内存地址上修改元素,而是指向了新的内存引用
浅拷贝可以将原来的不可变数据类型拷贝过去,复制体的改变会影响牵扯原来的数据
② 堆和栈的区别
1.申请方式不同 栈是系统自动分配的 堆是人为申请开辟的
2.申请大小的不同 栈的内存空间小 堆的内存空间大
3.申请效率的不同 栈的申请速度快 堆的申请速度慢
4.底层不同 栈是连续的空间 堆是不连续的空间 是一棵完全二叉树
5.存储内存的不同 栈在函数调用的时候,第一个进栈的是该函数的下一个指令的地址,然后是函数的各个参数,参数是由右向左入栈的之后是函数的局部变量,静态变量是不会入栈的,他会存储在静态存储区。
当本次函数调用结束后,局部变量先出栈,之后是参数最后栈顶指针指向最开始存储的地址,也就是主函数中的下一条指令,程序由该点继续运行。
堆一般是堆的头部用一个字节存放堆的大小,堆内的具体内容由程序员自己安排。
③ 堆 栈 队列的区别
1.堆 人为申请开辟的 空间大 速度慢 不连续的完全二叉树
堆是在程序运行的时候,申请某个大小的内存空间 即动态分配内存
对其访问和对一般内存的访问没有区别。
2.栈 stack 其实就是一个桶 是系统自动分配的内存空间 先放进去的后拿出来
后放进去的先拿出来 后进先出 存放顺序*参数 局部变量 静态资源在静态内存空间 拿取顺序 *局部变量 参数 栈是在栈顶做插入和删除操作
3.队列 queue 先进先出 只能在队头删除 队尾添加
④ 数组array 链表 队列queue 堆栈stack的区别
1.数组 和链表都是内存的概念 数组是在连续的空间中存储数据 链表是在不连续的内 存空间中存储数据。
2.队列和栈都是存取的概念 队列是在队尾添加 队头删除 先进先出
堆栈是在队尾添加队尾删除 后进先出
队列和堆栈可以用链表实现也可用数组实现
网友评论