Python中is和==的区别的

在python中,is检查两个对象是否是同一个对象,而==检查他们是否相等.

str1 = ‘yangshl‘
str2 = ‘yang‘ + ‘shl‘
print(‘str1 == str2:‘, str1 == str2)
print(‘str1 is str2:‘, str1 is str2)
print("id(str1):", id(str1))
print("id(str2):", id(str2))

输出结果是:

str1 == str2: True
str1 is str2: True
id(str1): 17102416
id(str2): 17102416

问题:str1 是 一个对象吗??从id上看,的确是一个。

one = ‘yang‘
two = ‘shl‘
str3 = one+two
print(‘str1 == str3:‘, str1 == str3)
print(‘str1 is str3:‘, str1 is str3)
print("id(str1):", id(str1))
print("id(str3):", id(str3))

的结果是:

str1 == str3: True
str1 is str3: False
id(str1): 17102416
id(str3): 17102528

str3的计算结果明明是 yangshl。但是它和yangshl是不同的对象,但是value是相同的。

str4 = str(‘yangshl‘)
str5 = str(‘yangshl‘)
print(‘str4 == str5:‘, str4 == str5)
print(‘str4 is str5:‘, str4 is str5)
print("id(str4):", id(str4))
print("id(str5):", id(str5))

结果是:
str4 == str5: True
str4 is str5: True
id(str4): 17102416
id(str5): 17102416

java中会认为是不同的对象。但是在python中这说明使用 str和字符串直接量是一个对象。

如果比对list呢?

list1 = [1]
list2 = [1]
print(‘list1 == list2:‘, list1 == list2)
print(‘list1 is list2:‘, list1 is list2)
print("id(list1):", id(list1))
print("id(list2):", id(list2))

结果是:
list1 == list2: True
list1 is list2: False
id(list1): 16919944
id(list2): 16920520

所以如果你要比较两个值是否相同就用==,如果比较是否是同一个对象就用is。

其实python中的is比较的对象很像C语言中的指针,只有地址相同的指针才是同一个指针。

时间: 2024-10-17 23:13:58

Python中is和==的区别的的相关文章

Python中的切片操作

Python中的切片操作功能十分强大,通常我们利用切片来进行提取信息,进行相关的操作,下面就是一些切片的列子,一起来看看吧,希望对大家学习python有所帮助. 列如我们从range函数1-100中取7的倍数,函数及结果如下所示: >>> for i in range(1,100)[6::7]: print i 7 14 21 28 35 42 49 56 63 70 77 84 91 98 取一个list或tuple的部分元素是非常常见的操作.比如,一个list如下: >>

快速入门Python中文件读写IO是如何来操作外部数据的?

读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件). 读文件 要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符 >>> f =

python中yield用法

在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor). 一.迭代器(iterator) 在Python中,for循环可以用于Python中的任何类型,包括列表.元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发 StopIteration.任何这类的对象在Python中都可以用for循

他山之石,calling by share——python中既不是传址也不是传值

事情是这样的,Python里是传址还是传值令人疑惑,限于本人没有C基础,所以对大家的各类水平层次不一的解答难以确信. 第一个阶段: 在读<python基础教程第二版>的时候感到疑惑,然后群友解答(略敷衍),接着就是知乎上提问(感谢大家的热心回答,但我很晚才收到推送) 虽然是某天早晨睡不着,翻看公众号的时候看见一篇<不要再问 "Python 函数中,参数是传值,还是传引用?" 这种没有意义的问题了>的文章,初步释疑惑(但后来我觉得他的说法虽然形象,但是不准确) 第

Python中的staticmethod和classmethod

在python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法. 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例. 普通对象方法至少需要一个self参数,代表类对象实例 类方法有类变量cls传入,从而可以用cls做一些相关的处理.并且有子类继承时,调用该类方法时,传入的类变量cls是子类,而非父类. 对于类方法,可以通过类来调用,就像C.

Python学习-38.Python中的正则表达式(二)

在Python中,正则表达式还有较其他编程语言有特色的地方.那就是支持松散正则表达式了. 在某些情况,正则表达式会写得十分的长,这时候,维护就成问题了.而松散正则表达式就是解决这一问题的办法. 用上一次分组的代码作为例子: 1 import re 2 userinput = input("please input test string:") 3 m = re.match(r'(\d{3,4})-(\d{8})',userinput) 4 if m: 5 print('区号:' + m

Python学习-37.Python中的正则表达式

作为一门现代语言,正则表达式是必不可缺的,在Python中,正则表达式位于re模块. 1 import re 这里不说正则表达式怎样去匹配,例如\d代表数字,^代表开头(也代表非,例如^a-z则不匹配任何小写字符),$代表结尾,这些百科或者其他书籍都有. 例子一,字符串中是否包含数字: 1 import re 2 userinput = input("please input test string:") 3 if re.match(r'\d',userinput): 4 print(

Python中的import和from import

一.Python路径介绍 在python用import或者from...import来导入相应的模块. 模块其实就是一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中,我们就可以使用了. 这类似于C语言中的include头文件,Python中我们用import导入我们需要的模块. 二.搜索路径 Python会在以下路径中搜索它想要寻找的模块: 1. 程序所在的文件夹 2. 标准库的安装路径 3. 操作系统环境变量PYTHONPATH所

python中的静态成员方法和类成员方法

Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数: 2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量: 3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法. 实现静态方法和类方法的两种方式 一.在Python 2.3及之前,用staticmethod和classmethod类型对象包装实现 例