查看对象的内存地址

  • 使用id(),id(object)函数返回对象在其生命周期内的内存地址

==和is区别

  • ==是比较两个对象的内容是否相等。
  • is是比较两个对象的id值是否相等,也就是比较两个对象是否为同个实例对象,是否指向同一个内存地址。

代码块:一个模块文件,一个函数体,一个类,交互式命令行中的单行代码都是一个代码块

==和is的区别,两对象是int

  • 小整数对象[-5, 256]是在全局解释器内重复使用,不会被GC回收。
  • python内部为了将性能进一步提高,凡是在一个代码块中创建整型对象,如果存在一个值与其相同的对象在该代码块中,那么就直接引用不需要创建,否则创建一个新的对象出来。
  • python 出于对性能的考虑,但凡是不可变对象在同一代码块中有值相同的对象,就不会被创建,而是直接引用已存在的对象。
  1. 例:小整数对象
c = 3
def fun():
	a = 3
	b = 3
	print(a is b)
	print(a is c)
fun()

代码运行结果:

isdigital怎么用python_==与is

  1. 例 普通整型对象:
c = 300
def fun():
   a = 300
   b = 300
   print(a is b)
   print(a is c)
fun()

代码运行结果:

isdigital怎么用python_python_02

==和is的区别,两对象是str

  • 如果对象str中全是字母或数字时,==和is没有区别;
  • 如果对象str中含有特殊符号时,当两对象在同一代码块中,==和is作用一样;两个对象在不同代码块中,两个对象的值相等时,两个对象使用is时返回False。
    例子:
  1. 对象str中含有特殊符号
c = "zhang@"
def fun():
   a = "zhang@"
   b = "zhang@"
   print(a is b)
   print(a is c)
fun()

代码运行结果:

isdigital怎么用python_python_03

  1. 对象str中全是字母
c = "zhang"
def fun():
   a = "zhang"
   b = "zhang"
   print(a is b)
   print(a is c)
fun()

代码运行结果:

isdigital怎么用python_==与is_04

  1. 对象str中含有字母和数字
c = "zhang123"
def fun():
   a = "zhang123"
   b = "zhang123"
   print(a is b)
   print(a is c)
fun()

代码运行结果:

isdigital怎么用python_python_05

  1. 字符串中单个*20的对象的内存地址一样
c = "a" * 20
def fun():
   a = "a" * 20
   b = "a" * 20
   print(a is b)
   print(a is c)
fun()

代码运行结果:

isdigital怎么用python_==与is_06

  1. 单个字符*21及以上内存地址不一样 :
c = "a" * 21
def fun():
   a = "a" * 21
   b = "a" * 21
   print(a is b)
   print(a is c)
fun()

代码运行结果:

isdigital怎么用python_isdigital怎么用python_07