Python嵌套循环中的同一变量具有不同的ID?;

Python嵌套循环中的同一变量具有不同的ID?;,python,nested-loops,Python,Nested Loops,非常简单的Python代码,但是为什么变量n具有不同的ID?如何实现此函数以获取car的字典名 a=[{'a':['apple','animal']},{'b':['banana']},{'c':['class','car']}] n=0 当n

非常简单的Python代码,但是为什么变量
n
具有不同的ID?如何实现此函数以获取
car
的字典名

a=[{'a':['apple','animal']},{'b':['banana']},{'c':['class','car']}]
n=0
当n<3时:
打印(id(n))
对于[n]中的k,键():
如果“car”不在[n][k]中:
n+=1
打印(id(n))
其他:
印刷品(k)
打破
打破
代码的结果是:

140720577618304
140720577618336

您似乎想在列表中搜索
汽车
,并找到哪个钥匙有该列表

a=[{'a':['apple','animal']},{'b':['banana']},{'c':['class','car']}]
对于a中的d:
对于k in d.keys():
如果d[k]中的“car”:
印刷品(k)
打破

输出:
c

id
不是您想要的。当迭代一个未发生变异的iterable时,不要对范围内的i(停止:开始:结束)使用
while条件或
。相反,您可能希望在iterable中为i设置一个
。在你的情况下,一行可能是

a = [{'a':['apple','animal']},{'b':['banana']},{'c':['class','car']}]
answer = [k for d in a for k in d.keys() if 'car' in d[k]]
输出

['c']

Python中的整数是不可变的。通过执行
n+=1
,您不是在修改名为
n
的对象,而是在覆盖名称以指向新的整数对象。

n+=1
分配一个新对象您可以忽略整数的
id()
。你有什么问题?您希望得到什么输出?
int
值是不可变的
n+=1
的行为与
n=n+1
完全相同,从
n+1
创建一个新的
int
(或获取对不同
int
的引用),并将结果赋回
n
。读取
id(i)
的结果不是变量
i
的id。它是变量
i
值的id。更准确地说,变量
i
引用的是对象的id。因此,如果您执行
j=123
,那么
i=j
,那么
id(i)
将等于
id(j)
。但是如果你给
i
分配一个新值,那么
id(i)
将改变。非常感谢,这个输出正是我想要的。真正让我困惑的是id()的函数,现在我已经知道了它。
id()
函数可以用于检查对象的id以进行调试,但我会把它作为最后的手段。谢谢。在我编写的上述代码中,我试图更改
iterable
,它受
的限制,而
则受
的限制。好像我在最后一句话中把
break
放错了。很高兴听到这个消息!如果它有助于考虑接受这个帖子:)我选择了答案,指出了<代码> Id()/<代码>的实际功能,但是我还是要谢谢你。谢谢。此外,@Tom Karzes更清楚地解释了
id()
id(i)
的结果不是变量
i
的id。它是变量
i
值的id。更准确地说,它是我引用的变量的对象id。因此,如果您执行
j=123
,那么
i=j
,那么
id(i)
将等于
id(j)
。但是如果你给
i赋值,
那么
id(i)
就会改变。