오늘 파이썬 공부를 하며 신기한것을 발견했다.
신기한것을 발견한 문제는
사이트의 문제로, 평소에 자바나 c++로 문제를 푸는것과 같이 전역변수를 선언
하려고할 때, 원하는대로 선언이 되지않고 계속해서 빨간줄이 생겻다.
그래서 방법을 찾다 우연히
https://mungto.tistory.com/229
블로그에 들어가서 코드를 읽어보는데, list 타입의 값은 전역변수로 설정하지
않았는데도 불구하고 def내에서 사용 가능!, 하지만 일반 변수는 사용이 불가능!
그래서 이유를 찾아보다
이 블로그를 발견했다!!(구글링마스터)
글이 너무길다! 라고 하시는 분들을 위해 요약하자면
파이썬 데이터 타입은 immutable와 mutable 로 나뉘는데,
immutable = 변경 불가능
mutable = 변경 가능
변수 입니다. immutable = 튜플,정수,문자열 .... 등이 있는데, 놀랍게도 정수, 문자열은 변수 선언 이후 값의 변동이 생기면 새로운 메모리를 할당하여 변수를 재선언 하는것이라고 함!
[ ex) a = 1(주소 1번)
a += 1(주소 ??번) 주소가 바뀜]
그래서 변수의 선언 위치마다 새로운 변수를 선언하기 때문에 전역변수로 사용하기 위해서는 global이나 매개변수로 넘겨주는것이 맞다!
list는 mutalbe 타입으로 변경이 가능한 데이터타입으로 특별한 선언없이 전역변수로 사용가능한 타입!
그러므로 인덴트 없이 작성된 변수를 함수내에서 쓰고싶다면
1. global사용
2. 매개변수로 넘겨주기
새로운 사실을 알게되었따!!!!
// 추가 내용. 변수를 단순히 비교형으로 사용할 경우에는 정수,문자열 두다 사용가능.
하지만 변수이름을 사용하여 연산할 경우 문제발생
ex)
def test() :
if a==3 :
print("good") -> 정상출력
a += 3 -> 에러발생
a = 3
test()