source

python에서 두 변수가 동일한 개체를 참조하는지 비교

manysource 2023. 11. 1. 22:27

python에서 두 변수가 동일한 개체를 참조하는지 비교

두 변수가 동일한 개체를 참조하는지 확인하는 방법은?

x = ['a', 'b', 'c']
y = x                 # x and y reference the same object
z = ['a', 'b', 'c']   # x and z reference different objects

그래서 그런 거지.

예를 들어,x is y돌아온다True왜냐하면 그것은 그 동안 같은 물체이기 때문입니다.x is z돌아온다False서로 다른 개체(동일한 데이터를 보유하는 경우)이기 때문입니다.

두 가지 해결책이 맞는 동안x is z그리고.id(x) == id(z)이미 게시되어 있습니다, python의 구현 세부 사항을 지적하고 싶습니다.Python은 정수를 객체로 저장하며, 최적화를 위해 시작할 때(-5~256) 작은 정수를 많이 생성하고 작은 값을 가진 정수를 포함하는 모든 변수를 이러한 미리 초기화된 객체로 포인팅합니다.추가 정보

즉, 같은 작은 숫자(-5 ~ 256)로 초기화된 정수 개체의 경우 두 개체가 동일한지 확인하면 true로 반환됩니다(ON C-Pyhon, 제가 알기로는 이것이 구현 세부 사항입니다). 큰 숫자의 경우 한 개체가 다른 개체에서 초기화된 경우에만 true로 반환됩니다.

> i = 13
> j = 13
> i is j
True

> a = 280
> b = 280
> a is b
False

> a = b
> a
280
> a is b
True

id()를 사용하여 각 변수 이름이 참조하는 고유 개체를 확인할 수도 있습니다.

In [1]: x1, x2 = 'foo', 'foo'

In [2]: x1 == x2
Out[2]: True

In [3]: id(x1), id(x2)
Out[3]: (4509849040, 4509849040)

In [4]: x2 = 'foobar'[0:3]

In [5]: x2
Out[5]: 'foo'

In [6]: x1 == x2
Out[6]: True

In [7]: x1 is x2
Out[7]: False

In [8]: id(x1), id(x2)
Out[8]: (4509849040, 4526514944)

y is x될 것이다True,y is z될 것이다False.

이것은 문서에서 가져온 것입니다.python.org : "모든 개체는 동일성, 유형 및 값을 가집니다.한 번 생성된 개체의 ID는 변경되지 않으며, 개체를 메모리에 저장된 개체의 주소로 생각할 수도 있습니다.'is' 연산자는 두 개체의 ID를 비교합니다. id() 함수는 자신의 ID를 나타내는 정수를 반환합니다."

값을 변경할 때마다 개체가 ID 변경에 따라 다시 생성되는 것으로 보입니다.x=3 선 다음 x=3.14 선은 오차를 주지 않으며 x에 대한 다양한 ID, 유형 및 값을 제공합니다.

저는 시각적 피드백을 정말 좋아합니다. 그래서 가끔 http://www.pythontutor.com/visualize.html#mode=edit 을 열어 메모리가 어떻게 할당되는지, 무엇이 무엇을 참조하는지 확인합니다.

enter image description here

이 답장은 시각화에 관한 것이라 멋진 gif를 추가했습니다..

언급URL : https://stackoverflow.com/questions/5445080/compare-if-two-variables-reference-the-same-object-in-python