关于python3.7中字典的值中含有中文时的比较问题

代码如下:

dic2 = {
    's': '在'
}

if dic2['s'] is '在':
	print(1)
	print(id(dic2))
	print(id('在'))

结果如下图,很奇怪,可以发现他们的id是相同的,所以is成立。
在这里插入图片描述
当我们用is来比较英文或者数字时,和==的效果是一样的。此时的字典是用eval函数从str转换而来的。

train_info_dic = eval(r.text, globals)
for dic in train_info_dic['data']:
    # print(dic['train_no'])
    if dic['station_train_code'] is 'Z386':
        self.train_code = dic['train_no']
        print(id(dic['train_no']))
        print(id('Z386'))

结果如下,虽然他们的id不一样,用is得到的结果却是true,说明编译器仍然认为他们的值相等。

但是,当我这个字典的值是中文字符的时候,如果用is来比较就会得到false,如果用 = = 来比较就可以得到true。因此,当字典中值含有汉字的时候,最好使用 = = 来比较。

doc = urlopen(self.train_info_url).read()
# doc = str(doc, 'utf-8')
doc_dic = eval(doc, globals)
# print(doc)
# print(doc_dic)
for dic in doc_dic['data']['data']:
    if dic['station_name'] == '湛江西':
        print(dic['arrive_time'])
        print(id(dic['arrive_time']))
        print(id('湛江西'))

结果如下,id仍然不同,用is得到的结果是false,但是用==得到的结果为true。
在这里插入图片描述
更深层次的原因我就不知道了,被这个奇怪的东西困惑了一晚,希望能有大神讲解一下为什么。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vehicoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值