2016-12-15 1 views
2

foo 변수를 가지고 있고, id을 변경하지 않고 foo이 (print을 사용하여) 어떻게 보이는지 변경할 수있는 방법이 있다면, foo은 변경 가능하다는 것을 알 수 있습니다. 그렇지 않으면 변경할 수 없습니다.파이썬에서이 함수가 변경 가능하다는 것을 어떻게 알 수 있습니까?


예를 들어, 당신은 list에 대한

foo = [1, 2, 3] 
print(foo, id(foo)) 
foo[0] = 100 
print(foo, id(foo)) 

하지만 int있는 방법을이 작업을 수행 할 수 있습니다.


하지만 기능은 어떻게됩니까? 우선, 위의 변경 가능성과 불변성에 대한 나의 정의가 맞습니까? 그렇다면 가변적임을 증명하기 위해 id을 변경하지 않고 기능을 변경하는 방법을 찾을 수 있습니까?

답변

1

당신은 명시 적으로 해당 ID에 영향을주지 않고 함수의 코드를 변경할 수 있습니다 (여기에 코드를 사용하여 파이썬 2.7입니다) :

>>> def f(): 
...  print "f" 
... 
>>> def g(): 
...  print "g" 
... 
>>> id(f) 
140305904690672 
>>> f() 
f 
>>> f.func_code = g.func_code 
>>> id(f) 
140305904690672 
>>> f() 
g 
관련 문제