我是靠谱客的博主 平淡烤鸡,最近开发中收集的这篇文章主要介绍python为什么是动态类型_Python---什么是动态类型?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Python是动态类型语言

你知道为什么Python中声明一个变量而不需要提前声明类型吗?

变量只是对象的引用,不存在类型这个概念

而对象是一块内存空间里的数据,对象的头部会标记自己的类型 还有一个时引用计数器 当对象被一个变量引用是计数器就是1 当计数器为0 则销毁

比如

x = 1

x = 'hello' 此时对象1的计数器为0自动销毁

a=3

b=a

思考这中间的引用关系?注意int类型在Python中是不可变的

对象的垃圾回收机制: 因为对象存在内存中如果不定期清除的话 会浪费内存,可以根据对象的引用计数器来销毁自身

a = 3  a的内存地址123

b = a  b的内存地址123

0818b9ca8b590ca3270a3433284dd417.png

a = 3  a的内存地址123

b = a  b的内存地址123

a = 'spam'  a的内存地址为1234  b的内存地址依然为123

0818b9ca8b590ca3270a3433284dd417.png当a='spam'时并不是在原来的内存空间将3修改为'spam' 而是重新开辟新的内存空间放了一个新的对象为'spam' 这就是int类型不可变的特性,元祖,也是,也有一些是可以在原出修改的 列表 字典 通过class定义的类

L1 = [2,3,4]

L2 = L1

L1 = 23 此时L1直接设置为不同的对象 L2则还是指向[2,3,4]这个列表

但是如果

L1[0] = 23 此时L1和L2还是引用相同对象 这种情况的话修改某个变量可能会对程序其他部分产生影响

可以通过复制对象来避免这一现象的发生

L2 = L1[:] 这样就想当与拷贝了 而不是直接引用L1的内存空间

共享引用和相等:

a = [1,2,3]

b = [1,2,3]

a == b  值相等就ok

True

a is b   内存地址不同,不是同一个对象

False

a =1

b = 1

a is b

True   这是因为Python的缓存机制 小的整数和字符串被缓存并且复用了

import

sys.getrefconut(1) 查询对象1引用次数

应为不能改变数字和字符串所以对一个对象有多少次的引用都没有关系  这也是Python执行速度优化方法的一种

最后

以上就是平淡烤鸡为你收集整理的python为什么是动态类型_Python---什么是动态类型?的全部内容,希望文章能够帮你解决python为什么是动态类型_Python---什么是动态类型?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部