python中,a=10.0 b=10.0 a is b 为什么输出是false

>>>a=10.0>>>b=10.0>>>a is bFalse为什么当a=10,b=10时,a is b输出的是True呢?

>>>a=10.0

>>>b=10.0
>>>a is b
False

为什么当a=10,b=10时,a is b 输出的是True呢?

a is b

比较的是变量a与变量b的内存地址是否相同,即

id(a)==id(b)

Python的内置函数id就是用来查看变量地址的

id(a)等于id(b)说明变量a和变量b指向的是同一个内存空间。

Python中整数、浮点数都是immutable,也就是创建以后不能改变内存空间的值,对变量重新赋值以后,相当于变量重新指向了另外一处内存空间。

a = 10
print id(a)
a = a + 1
print id(a) #id(a)的值会反生变化

这样,多个变量指向相同的内存空间就不会有影响,反而节省了内存的占用。

然而具体是否相同值的变量就占有相同内存空间,完全有Python的实现方式决定。

当变量a与b的值到1000时,你会发现他们的内存空间又不一样了

a = 1000
b = 1000
id(a) == id(b)
a is b

总的来说写程序是一般不用关注变量的内存空间地址,也很少使用is命令

python中仅缓存简单的整型,(-1,100)。这个a=10,b=10,指向相同的整型对象,但是a=10.0和b=10.0时,并没有指向相同的浮点型对象。

原文地址:https://www.cnblogs.com/lmh001/p/9858909.html

时间: 2024-08-26 11:26:20

python中,a=10.0 b=10.0 a is b 为什么输出是false的相关文章

python中2进制、10进制、16进制等之间的转换

10转2: bin(8) # '0b1000' 2转10: int('1000', 2) # 8 10转16: hex(15) # '0xf' 16转10: int('f', 16) # 15 2进制和16进制中间通过转10进制可以相互转换

python中快速获取本地时区当天0点时间戳的一种方法

如下所示,看了网上的几种方法,这种方法算是代码量比较小的,同时可以保证求的是本地时区的0点时间戳,返回的是浮点数,需要的话自己转一下int In [1]: import time In [2]: from datetime import datetime In [3]: time.mktime(datetime.now().date().timetuple()) Out[3]: 1532188800.0 原文地址:https://www.cnblogs.com/AcAc-t/p/python_d

python中read,readline,和readlines的区别 并逐行输出

python中有神奇的三种读操作:read.readline和readlines read() ?: 一次性读取整个文件内容.推荐使用read(size)方法,size越大运行时间越长 readline() ?:每次读取一行内容.内存不够时使用,一般不太用 readlines() ? :一次性读取整个文件内容,并按行返回到list,方便我们遍历 下面看代码: #!/usr/bin/python # -*- coding: utf-8 -*- import linecache f = open("

Python中 str类方法(1)

capitalize() 字符串首字母大写 1 str1="ni hao ma" 2 str2=str1.capitalize() 3 print(str2)#输出: Ni hao ma center(width, fillchar=None) 将字符串放在中间:在制定长度下,首尾以指定字符填充 str1="this" str2=str1.center(20,"*") print(str2) #输出:********this******** st

10.16输入一个字符串,内有数字和非数字字符,如: a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组num中。例如123放在num[0]中,456放在num[1]中……统计共有多少个整数,并输出这些数。

10.16输入一个字符串,内有数字和非数字字符,如: a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组num中.例如123放在num[0]中,456放在num[1]中--统计共有多少个整数,并输出这些数. #include <stdio.h> int main(){ void search(char * parr, int * pnum); char arr[100],* parr; int num[30],* pnum; parr=arr;

正则表达式:网店中折扣价格-要求大于0小于10,且允许保留一位小数点

需求:网店中折扣价格-要求大于0小于10,且允许保留一位小数点 需求分析: 1,)取值范围为(0,10),两端都是开区间: 2,)“可保留一位小数”,可以不包含小数,但如果包含小树就一定要仅包含一位小数. 开发(javascript下): 第一步:0-10包含一位小数:/^\d(\.\d)?$/ 第二步:排除特殊的0和0.0和10,这样的写法为: /^[^0][^0.0][^10]\d(\.\d)?$/ 测试下:是否是我们想要的结果呢? 答案:no 具体原因,我也解释不清. 换种思路: 既然0.

在JAVA中 解析String,形如(0&lt;p&lt;10 or 0&lt;=p&lt;10 or 0&lt;p&lt;=10 or 0&lt;=p&lt;=10)的字符串,看所传入的参数是否在表达式内

今天在项目中需要解析一个参数范围的字符串,然后判断一个传入参数是否在这个表达式内.因为参数范围字符串是(0<p<10 or 0<=p<10 or 0<p<=10 or 0<=p<=10)的组合,所以我觉得直接去进行split处理比较麻烦,就运用了String转为 byte[] 再做处理.代码如下. 不知道大家有没有更好的处理方式. package test_lzg; import java.util.ArrayList; import java.util.L

for(i=0,j=0;i&lt;10,j&lt;10;i++,j++)用python怎么写

for i,j in zip(range(10),range(10)):    i+=1    j+=1 或>>> i=j=0>>> while i<10 and j<10:    i+=1    j+=1 或 for (x,y) in zip(range(10),range(10)): print x,y 或 for (i,j) in [(x,x) for x in range(0,10)]:        print str(i)+"=&quo

现在给你N个数(0&lt;N&lt;1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和。 第一行给出整数M(0&lt;M&lt;10)代表多少组测试数据 每组测试数据第一行给你N,代表该组测试数据的数量。 接下来的N个数为要测试的数据,每个数小于1000

#include <stdio.h>#include <math.h>int main() { int i,j,N,a=0,n,m,k; int s[1000]; scanf("%d",&N); while(N--) { scanf("%d",&n); for(j=0;j<n;j++) { scanf("%d",&s[j]); if(s[j]==1) s[j]=0; k=sqrt(s[j]);