[python] 두 변수가 파이썬에서 동일한 객체를 참조하는지 비교

두 변수가 동일한 객체를 참조하는지 확인하는 방법은 무엇입니까?

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



답변

그 이유 is는 다음 과 같습니다. 동일한 객체 인 경우 x is y반환 합니다.Truexy


답변

y is xTrue, y is z될 것입니다 False.


답변

두 올바른 솔루션 동안 x is z과이 id(x) == id(z)이미 게시 된, 파이썬의 구현 세부 사항을 지적하고 싶다. 파이썬은 정수를 객체로 저장합니다. 최적화로 시작 부분 (-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)


답변

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

여기에 이미지 설명 입력

이 댓글은 시각화에 관한 것이므로이 멋진 gif를 추가했습니다.


답변

이것은 docs.python.org에서 가져온 것입니다. “모든 객체에는 ID, 유형 및 값이 있습니다. 객체의 ID는 일단 생성 된 후에는 변경되지 않습니다. 메모리에있는 객체의 주소라고 생각할 수 있습니다. ‘is’연산자 두 개체의 ID를 비교합니다. id () 함수는 ID를 나타내는 정수를 반환합니다. “

분명히 값을 변경할 때마다 개체는 ID 변경으로 표시된대로 다시 생성됩니다. x = 3 행 다음에 x = 3.14 행은 오류를 제공하지 않고 x에 대해 다른 ID, 유형 및 값을 제공합니다.


답변