浅谈python中,一切皆对象,类比java

引子

前些日子机缘蹭了几次python课,书中有这么一句话’Python从设计之初就是一门面向对象的语言,它有一个重要的概念,即一切皆对
象。’简单谈一谈python中对象的创建和引用关系

对象的创建和引用

像大多数语言一样给一个变量(在python中都叫对象)赋值,那么就会 内存中开辟一块空间,在python中该对象的引用会指向该内
存空间

例如:  a = 5     //   内存中开辟一块空间值为5(创建) a对象指向5这个值代表的内存空间

对象引用的比较

对于基本类型 int ,string ,char (python中虽然没有这些,但是这里写这些好理解)

执行如下代码

  a = 5
  b = 5 
  a is b

  >> True  //按照理解是开辟了2个空间,而为什么a is b == True呢,简单基本类型python执行器发现存在5这块内存空间,
  它就会直接将b指向5,而不是重新开辟一块内存空间,这和java中 String a = "java" ;String b = "java" ;a == b 是一个道理

  既然a b 指向相同的内存空间,那么修改a的值
  执行如下代码

   a = 6 // 那么 b 会是多少?
   b
   >> 5  // 这是因为python会重新开辟一块内存空间值为6 并将a指向这块为6的内存空间,
   而b还是指向5那块内存空间,验证如下
   a is b
   >> false //的确a,b 对象指向的内存空间已经不一样了

对于非基本类型 (list)

执行如下代码
a = {'a','b'}
b = {'a','b'}
a is b
>> False //开辟了两块内存空间他们指向的内存地址不一样,这和java中 new关键字得到的对象是一个道理
执行 
a == b
>> True //这是在比较他们指向内存空间的值是否一样 a和b指向内存空间的值是一样的

总结

根据java的观点new 出来的对象必将开辟一块新的内存空间。而python中一切皆对象的概念,在基础类型上(int,string,char)
只能和java中String c = "java"; String d = "java"; 做相同的类比,在非基础类型上则是和String e = new String("java")
做类比了。

Alt text