首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查变量是否引用Python中的另一个声明对象?

如何检查变量是否引用Python中的另一个声明对象?
EN

Stack Overflow用户
提问于 2022-11-22 04:34:33
回答 1查看 48关注 0票数 0

一个变量的打印类型只返回指向数据的类型

代码语言:javascript
复制
i = [5,6,7,8]
j = i
print(type(j))
代码语言:javascript
复制
<class 'list'>

j引用可变类型。所以

代码语言:javascript
复制
j[0] = 3
print(i)
print(j)
代码语言:javascript
复制
[3, 6, 7, 8]
[3, 6, 7, 8]

我想要一个函数,返回true表示jfalse返回i。如果它是内置的或者任何人都可以写的话,我们会很感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-22 04:42:12

Python中没有“指针”,就像C++ (或类似语言)中的指针一样。Python中唯一的区别是可变的还是不可变的。但所有变量都只是对对象的引用。

不可变类型的变量指的是不能修改的值,只能替换。int是一个不可变类型的示例。

当您运行代码时,您将5分配给i,然后将i的值分配给j,这样j现在也有了5值,但是由于这些都是不可变的值,所以只能更改两个变量的整个值,这不会影响另一个变量的值。

具有可变类型的变量具有可以修改的值。list是一个可变类型的示例。

当你运行这个:

代码语言:javascript
复制
xs = [1, 2, 3]
ys = xs
xs[0] = 999

最后一条语句修改两个变量的值,因为xs值的列表与分配给ys的列表相同,最终指令修改了该值。

不可变类型,包括数字、字符串和元组以及其他一些简单类型。可变类型包括列表、字典和大多数其他更复杂的类。

另外,例如,请看一看以下内容:

代码语言:javascript
复制
a = 1
b = 1
c = b + 1
d = 2
print(id(a), id(b), id(c), id(d))

这将打印四个数字,但请注意前两个数字将如何相同(因为它们都引用1)和后两个数字也是相同的(因为它们都是指2)。

话虽如此,如果您想测试某件东西是否是可变的,则没有简单的方法可以这样做--但要这样做的一个常见原因是,您想测试某件东西是否是可接受的,而您可以测试:

代码语言:javascript
复制
s = 'test'
print(s.__hash__ is None)  # False


xs = [1, 2, 3]
print(xs.__hash__ is None)  # True
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74527549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档