is和Java中对象引用的区别

is和Java中对象引用的区别

a = 5

b = 5

print(a is b)

这样的输出是True,就是说a和b都是5,所以指向同一个变量。

在java中,int a = 5;  int b = 5;  这样的写法只是a和b这两个局部变量的值是5,而没有确定的指向关系,而java中对象的引用变量,如果同时指向一个对象的话,那么对任何一个引用进行对象的成员变量的更改都会导致用另一个引用使用成员变量时,值发生了改变。

回到最初python的例子,a和b同时指向一个值,那么他们就指向了同一块内存,那么我做b = 6,这个时候b就会重新指向另一块内存?python中变量指向的内存,会随着赋值的不同而一直改变?


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好,is比较的两个条件1、内容相同,2、内存地址相同。

在Python中,不同的值和不同的数据类型在内存中会有不同的地址来存储。但python会对小整数[-5,256]区间内的整数创建小整数对象池,这些对象一旦创建,就不会回收,所有新创建的在这个范围的整数都是直接引用的。所以造成在[-5,256]区间内的整数不同变量只要值相同,引用地址也相同。需要注意的是,仅仅是在命令行中执行,而在Pycharm中,结果是不一样的,这是因为解释器做了一部分优化。

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

  • Klijief 提问者 #1
    我用记事本写了个258的例子,没有用pycharm,输出还是True,是不是这个is基本上就是==啊,除了没有强制转换,必须在同一类型下判断是否为同一数值。
    2019-05-17 14:23:05
  • 好帮手慕美 回复 提问者 Klijief #2
    is 两边的参数指向内存中的地址,== 则是仅仅判断值相同。在脚本中运行的时候,同类型同值的数据指向的是同一个地址。同学可以在终端中进行测试,会看到区别。
    2019-05-17 15:16:23
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师