두 변수가 동일한 객체를 참조하는지 확인하는 방법은 무엇입니까?
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
반환 합니다.True
x
y
답변
y is x
것 True
, 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, 유형 및 값을 제공합니다.