is和 =
一般新建一个对象,内存地址是不相同的,下面的是例外。
字符串有小地址池的要求:不能有空格、没有特殊字符和字符长度小于等于20.
数字-5到256
a is b:a和b的内存地址相等
a == b :a和b的值相等
a = b =1,:是1的两个标签
a = 1和b = 1理论上说对象是不一样的。
>>> a =1 >>> b =1 >>> c = 2 >>> a == b #值相等 True >>> a == c False >>> a is b #a和b指向的是一个值,内存地址相同 True >>> a is c False >>> e = 365 #但是有例外 >>> f = 365 >>> e is f False >>> e == f True
先要在重新声明的是:字符串、数字都是属于非容器,因此不存在拷贝一说。
按理说,365和1都是属于类原子类型,都是不能在更改,为啥会有完全不同的结果了?
这是因为对于数字来说,有一个小数据池,创建相同的数字对象,都会指向一个相同的数据池,范围在-5~~255之间,这样做也是为了节省内存。
>>> e = 365 >>> f = 365 >>> e is f False >>> e == f #值虽然相等 True >>> id(e) #内存地址并不相同 139928493356080 >>> id(f) 139928493355696
相对于数字来说,没有空格的字符串也有小数据池。
>>> oo = 'wo shi' >>> op = 'wo shi' >>> id(oo) 139928493584544 >>> id(op) 139928493584656 >>> a = 'wqrqw' #有地址池,长度在20以内都是共享内存的 >>> b = 'wqrqw' >>> id(a) 139928493545768 >>> id(b) 139928493545768
>>> skt = 'k'*20 >>> kt = 'k'*20 >>> id(skt) 139717594629728 #长度20的时候内存地址是一样的 >>> id(kt) 139717594629728 >>> edg = 'j'*21 >>> ede = 'j'*21 >>> id(edg) #大于20的时候内存地址是不一样的 139717594629800 >>> id(ede) 139717594629872
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理