# mutable

42개의 포스트

[Python] mutable과 immutable

파이썬의 객체는 mutable과 immutable 중 하나의 속성을 갖는다. 두 개념에 대해 알아보기 전에 중요한 사실 두 가지만 짚고 넘어가겠다. 파이썬에서 모든 데이터는 객체이다. 변수는 객체에 대한 참조를 갖는다. 따라서 다른 값을 할당이 가능하다고 해서 해당 변수가 참조하는 객체가 mutable한 것은 아니다. mutable 객체의 내부 상태를 변경 가능한 속성을 의미한다. 이러한 속성을 가진 객체는 다음과 같다. list set dictionary 객체를 참조하는 변수에 다른 객체를 할당 가능하다고 해서 이 객체가 mutable한 것은 아니다. 해당 객체의 내부 상태를 변경할 수 있다는 것은 보유한 원소의 값을 변경할 수 있다는 것을 의미한다. 무슨 말인지 예시 코드를 보자. 변수 자체에 다른 리스트를 할당하면 주소가 변하는 것을 볼 수 있다. immutable 생성된 시점의 값으로 고정된 객체를 의미한다.

2023년 8월 29일
·
0개의 댓글
·

Mutable, Immutable

저번 편에서는 파이썬의 데코레이터, 클로저의 동작 방식에 대해서 알게 되었다. 그와 같이 스코프에 관련된 이야기도 나왔는데 뭔가 이상한 점을 느끼지 못했는가? LEGB 스코프에서 Local에 있는 것에대해서는 값을 읽거나 수정하는 것이 당연히 가능하다는 것은 모두 알고 있을 것이다. 그런데 함수 외부에 존재하는 Enclosing 값도 읽는 것은 가능한데 어떻게 값을 바꿀수 있을까? 문제 한번쯤은 이런 경험들이 다들 있지 않은가? 간단하게 pow 함수가 몇번 실행되는지 체크하는 기능을 추가했다. 그런데 결과는 대체 왜 이러는 걸까? 클로저를 설명할때, 메모이제이션 기법을 사용할 때는 cache 딕셔너리를 그냥 참조해도 문제가 없었는데..? 이는 파이썬이 함수 내에서 변수를 사용할 때는 로컬 변수로 간주하고 사용하기 때문이다. 그냥 로컬 변수로 간주하고 사용하기 때문에 아예 그 변수명이 정의되지 않아 발생하는 NameError가 아니면 값을 참조해서 사용하는 경우는 자

2023년 8월 12일
·
0개의 댓글
·

[AndroidRoadMap] Part 1. 개발 언어

Android 개발자라면, 혹은 개발자가 되고 싶다면 도구인 개발 언어를 기본부터 응용까지 잘 다룰 줄 알아야 합니다. 이 포스트는 Kotlin 언어와 관련해 아래 내용들에 대해 정리합니다. ⚠️ 개인 경험을 기반으로 적은 지식이므로 잘못된 내용이나 추가로 덧붙일만한 내용이 있다면 댓글이나 개인적으로 언제든 알려주세요! >Kotlin의 기본 특징 및 Java와의 비교 > >Q) null safety의 개념이란? > >Q) mutable과 immutable 컬렉션의 차이는 무엇이며 각각 언제 쓰는 게 좋은가? > >Q) [lateinit var와 lazy delegate의 차이와 각각의 장단점은 어떻게 되는가?](#lateinit-var와-l

2023년 7월 22일
·
1개의 댓글
·

Mutable과 Immutable

Mutable과 Immutable 가변 객체(Mutable Object)와 불변 객체(Immutable Object)는 내부 상태를 변경할 수 있나 없나로 나뉜다. 쉽게 설명하자면 Mutable 객체는 내부 변수가 수정이 가능하고 Immutable 객체는 내부 변수 수정이 불가능하다. 두 속성에 대하여 간단히 요약하고 자세히 다뤄보려 한다. | |Mutalbe Obejct |Immutable Obejct | |:-----:|-----------------------|------------------------| | 특징 |생성된 이후 수정 가능 |생성된 이후 수정 불가능 | | 변조 |객체의 내부 변수를 재할당하여 변경|새로 객체를 생성하여 재할당하여 변경| | 성능 |변경시 내부 상태만 변경하여 속도 빠름|변경시 새로 생성하므로 속도 느림| |Thread Safe|동기화 문제 발생 위험 |동기화 문제 없음

2023년 7월 1일
·
0개의 댓글
·

mutable과 immutable의 차이점은 무엇인가요?

mutable과 immutable의 차이점은 무엇인가요? Mutable과 Immutable의 차이점은 다음과 같습니다: Mutable (가변): 가변 객체는 생성된 후에 내부 상태를 변경할 수 있습니다. 객체의 속성 값을 변경하거나 추가, 제거할 수 있습니다. 이전 상태와 현재 상태 간의 차이를 추적하기 어렵습니다. 여러 개의 참조가 있을 경우, 하나의 참조에서 변경된 경우 다른 참조에도 영향을 줄 수 있습니다. 가변 객체는 메모리 사용량이 더 큰 경우가 있을 수 있습니다. 변경될 때마다 새로운 객체를 생성하거나 할당을 해야할 수도 있습니다. Immutable (불변): 불변 객체는 한 번 생성되면 내부 상태를 변경할 수 없습니다. 변경이 필요한 경우 새로운 객체가 생성됩니다. 객체의 상태를 변경하는 대신, 변경된 상태의 사본을 생성합니다. 이전 상태를 보존하며, 상태 변경을 추적하기 용이합니다. 여러 개의 참조가

2023년 6월 21일
·
0개의 댓글
·

splice()가 string에서 쓰이지 못하는 이유

새로운 지식을 얻은 걸 시작으로... JS 기초 탐험중인데요... 나빼구 다 아는 것 같은 기초... string은 불변한 값이다 을 배열처럼 다룰 수 있다는 지식만 가지고서, 코딩테스트를 풀다가 를 만나고 확실하게 배우게 된 기초지식 😁 문자열을 배열처럼 다룰 수 있어서, 나 로 접근하고 사용할 수 있다. 그러나 문자열과 배열의 차이점은, 배열은 이며 이고, 문자열은 이면서, 이다. Array 메소드마다 mutable / immutable 한 특성을 가지고 있다. 이 말은, ** 특성을 지니고 있다는 것이다. splice()는 mutable한 메서드이다 >* Array.splice(시작인덱스, 삭제할요소갯수, [치환시킬요소1, 요소2, 요소3, ...]) * 는 원본 배열을 변경하는 메서드다. 근데 변경 불가능한 값인 문자열에 를 먹이고 있으니 가 뜬 것이다. = **mutable한 메서드가 immutable한 값을 건드리고 있었다는

2023년 5월 23일
·
0개의 댓글
·
post-thumbnail

[IaC] 가변적, 불변적 인프라스트럭처와 Terraform 상태유지

Immutable Infrastructure (불변적 인프라스트럭처) 불변적 인프라스트럭처는 애완동물과 가축에 대한 비유로 자주 설명 합니다. 애완동물은 이름을 붙이며, 아프면 병원에 데려가고 가족처럼 보살펴줍니다. 하지만 가축은 이름이 아닌 태그를 붙이고, 전염병이 있을 경우에는 처분하게 됩니다. 불변적 인프라스트럭처의 정의는 서버가 설치된 이후 절대 변경되지 않는 형태의 인프라다. 여기서 수정은 기존의 서버를 제거하고 새롭게 만드는 것을 의미 멱등성의 법칙이 적용된다. 멱등성 법칙 : 같은 작업을 여러 번 해도 결과가 동일하다. 한번 설정된 서버는 수정 없이 파기되므로 멱등성을 보장한다. 특징 각 서버의 버전은 서로 독립적이며 두 가지 버전을 실행할 수 없다 변경

2023년 5월 12일
·
0개의 댓글
·

복사

객체 구분 > #### mutable 객체: 변경가능한 객체 mutable 자료형 : list, set, dictionary mutable 객체의 경우 얕은 복사를 하게 될 경우 어느 변수 하나가 값을 추가, 변경, 제거할 경우 나머지 변수 또한 따라서 변하게 됨. > #### immutable 객체 : 변경불가능한 객체 immutable 자료형 : int, float, tuple, str, bool immutable 객체의 경우 값이 변경되면 '무조건' 참조가 변경되기 때문에 얕은 복사를 하던 깊은 복사를 하던 참조하던 다른 객체의 값이 따라 바뀌지 않음. 결론 파이썬에서는 immutable 객체의 값이 같은 경우에 변수에 상관없이 동일한 곳을 참조 반면, mutable 객체의 경우에는 값이 같더라도 객체를 각각 생성해서 참조 결론적으로 파이썬에서 '얕은 복사'와 '깊은 복사'를 구분하고 학습해야 하는

2023년 4월 28일
·
0개의 댓글
·

mutable string

배경 java 와 python 을 공부했던 나는 현재 ruby on rails 로 어플리케이션을 관리하고 있다. python 과 비슷하면서도 다른 ruby 언어의 자유도와 패턴 매칭 기법은 매우 놀라웠다. 그러나 모듈 및 singleton 구조 등을 이해하기는 어려웠다. 지금 ruby 를 다룬지 1년이 넘었지만 자신있는 언어라 하면 ruby 를 언급할 수는 없을 거 같다. 이번에 작업하면서 맞닥뜨린 이슈가 있다. 해당 이슈를 혼자 해결못하였고 다른 팀원들의 도움을 받아 장작 6시간 넘게 삽질한 결과, 아주 놀라운 걸 발견했다(놀랍기보다는 무서운 쪽에 가까운 듯). Setting ref: https://github.com/rubyconfig/config ruby on rails 에서 설정 값을 관리하는데 유용하게 사용되는 젬인 config! 이를 이용하면 다음과 같이 세팅 파일을 만들고 사용할 수 있다. setting file ruby code b

2023년 4월 17일
·
0개의 댓글
·
post-thumbnail

[Java] - Mutable과 Immutable 차이

1. Mutable과 Immutable | Mutable | Immutable | | :----: | :-------: | |생성된 이후 수정 가능|생성된 이후 수정 불가능 | |이미 존재하는 객체에 재할당(값 변경)| 이미 존재하는 객체이더라도 새로운 객체를 생성하여 재할당 | |값을 변경할 수 있는 메소드 제공|값을 변경할 수 있는 메소드 제공 x | |Mutable class일 경우 Getter와 Setter 존재| Immutable class일 경우 Getter와 Setter 미존재 | |thread safe하지 않을 수 있음(병렬처리 시 값 보장할 수 없게 됨)| thread safe(병렬처리 시 문제 없음) | StringBuffer, StringBuilder, java.util.Date 등이 해당|Legacy classes, Wrapper classes, String class 등이 해당 | >* 은 객체의 수정을 허용하나, 인 경

2023년 4월 16일
·
0개의 댓글
·
post-thumbnail

static 선언

static >정적변수는 지역변수와 전역변수를 섞어서 보완한 것이다. > 지역변수는 변수가 휘발성이 강하다는 단점이 있고 > 전역변수는 모~든 공간에서 사용이 가능하다는 단점이 있다. > 두 변수의 단점을 보완한 변수가 정적변수이다 > 정적변수는 해당지역에서 사용되며, 데이터가 프로그램이 끝날때까지 남아있다.(지역이 끝나도 소멸되지 않는다) 전역변수에서 선언된 static은 선언된 파일 내에서만 참조를 허용하겠다는 의미 함수 내에 선언된 static은(지역변수에 붙은 static) 한번만 초기화되고, 지역변수와 달리 함수를 빠져나가도 소멸되지 않는다 에서 선언된 프로그램 실행과 동시에 메모리에 할당, 프로그램이 끝나면 소멸 static 변수의 초기화는 1번

2023년 3월 28일
·
0개의 댓글
·
post-thumbnail

[파이썬] 얕은 복사와 깊은 복사

들어가기 전에 .. 이전 포스팅 mutable, immutable 객체에 대한 이해가 있어야 한다. https://velog.io/@hyooo1022/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%95%A8%EC%88%98%EC%9D%98-%EC%9D%B8%EC%9E%90-%EC%A0%84%EB%8B%AC 얕은 복사 Shallow Copy 얕은 복사는 변수를 복사했지만, 실제로는 연결되어 있는 것을 뜻한다. 즉 변수를 복사하긴 했지만 참조한 곳은 동일하기 때문에 같은 변수를 가리키고 있는 것이다. 그림으로 보면 arr1 = [1, 2, 3] arr2 = arr1 위와 같이 리스트에 =으로 복사(얕은 복사)를 했다고 하면, 아래와 같은 그림이다. 복사했다고 생각했지만 사실 *

2023년 2월 13일
·
0개의 댓글
·

[파이썬] 함수의 인자 전달, mutable, immutable 객체

지역변수 함수 내에서 선언된 변수 함수 안에서만 사용 가능 전역변수 함수 밖에서 선언된 변수 모든 함수에서 사용 가능 함수의 인자 전달 주로 다루고자 하는 내용은 이부분이다. 코딩테스트 준비를 하던 중 전역변수로 선언한 부분을 함수에서 다루었을 때에 대한 의문이 생겨 찾아보게 되었다. 1. 변수, 객체, 주소 파이썬의 모든 타입은 객체이다. 변수에 객체를 할당하면 특정 메모리 주소 공간을 할당받게 된다. 그리고 그 변수를 다시 다른 변수에 대입하게 되면 같은 주소를 바라본다. 다시 a에 새로운 값을 할당하고 id값을 확인하면 a 값이 바뀌고, a의 주소가 변경된다. -> 이렇게 immutable 객체인 int, float, string, tuple은 값에 변화를 주면 재할당이 되므로 자연스럽게 메모리 주소가 변경된다. 하지만 mutable한 객체는 내부 값에 변화를 주면 같은 곳을 바라보고 있던 변

2023년 2월 5일
·
0개의 댓글
·

LiveData

https://developer.android.com/topic/libraries/architecture/livedata?hl=ko#createlivedataobjects https://velog.io/@eoqkrskfk94/LiveData%EC%99%80-Flow https://dev-imaec.tistory.com/39 https://dev-imaec.tistory.com/404 LiveData observable data holder = Data의 변경을 관찰 가능한 데이터 홀더 클래스 data가 변경될 때마다 알림을 받음 다른 일반 observable class와는 달리 LiveData는 Lifecycle(생명주기)를 인식함. Flow와는 달리 lifecycle을 인식해 Activity, Fragment 등의 다른 components들의 lifecycle도 고려 -> 다른 앱 구성요소인 Activity, Fragment, ser

2023년 1월 11일
·
0개의 댓글
·
post-thumbnail

[python] copy 라이브러리

python은 대입문에서 객체를 복사하지 않고 대상이 객체의 주소를 가르킴 얕은 복사는 새로운 복합 객체를 만들고, 원본 객체를 가리키는 참조를 새로운 복합 객체에 삽입 깊은 복사는 새로운 복합 객체를 만들고,재귀적으로 원본 객체의 사본을 새로 만든 복합 객체에 삽입 mutable은 요소가 변경되도 주소가 안 바뀌기 때문에 둘다 같이 바뀜 immutable은 요소가 변경되면 새로 할당 되기 때문에 안 바뀜 -- 리스트 안의 리스트 mutable객체 안의 mutable객체인 경우 얕은 복사시 객체주소는 다르나 객체 내부 요소의 주소는 같을 수 있음 -- id(객체)를 통해 동일한 주소 값을 가지고 있는지 확인 가능 참고 https://wikidocs.net/16038 ![](https://velog.velcdn.com/images/qqqqlss/post/e69e05f7-f871-458b-8aee-81cad66f768

2022년 11월 8일
·
0개의 댓글
·

[Python] Mutable, Immutable

1. Mutable, Immutable ? 파이썬에는 객체의 종류가 두가지가 있다. mutable : 변경 가능한 객체 immutable : 변경 불가능한 객체 mutable 객체로는 set, list, dictionary가 있고 immutable 객체로는 int, float, tuple, str, bool이 있다. 파이썬에서는 immutable 객체의 값이 같은 경우에 변수에 상관없이 동일한 곳을 참조한다. a와 b는 변수명이 다르지만 서로 같은 값(1)을 가리키므로 id를 출력했을 때 1이 존재하는 메모리 값을 출력한다.         Mutable mutable 객체는 같은 값을 가지더라도 모든 객체를 각각 생성해서 참조하므로 참조하는 메모리 값이 다르다. a와 b는 똑같이 같은 값을 갖고 있지만 출력하는 id값이 다르다. 변수 a가 고유의 리스트 [1,2,3]이 있는 메모리값을 가지고 있고 마찬가지로 변수

2022년 10월 7일
·
0개의 댓글
·
post-thumbnail

배열

배열 순서가 있는 값 순서: 인덱스 (0부터 번호를 매김) 값: 요소 배열의 속성 length : 배열의 길이 배열명.length > * #### 빈 배열인지 확인하기 cf) arr === []로는 확인 할 수 없다. [] === []은 false이다. 자바스크립트 상에서는 두 배열을 주소가 다른 두 개의 빈 배열이라고 생각하기 때문. 배열의 반복 > * 반복문을 이용해 배열의 요소를 한 번씩 출력하려면? > * 배열의 요소를 모두 더한 값은? 배열 메서드 배열 판별 Array.isArray() > * Array.isArray(판별할 배열) ARGUMENTS(매개변수): 판별할 배열 RETURN VALUE(반환 값): true or false 배열인지 판별 배열에 typeof를 쓰면 object라고 나옴. (객체 등과 구분 불가) 배열의 요소 추가,

2022년 9월 2일
·
0개의 댓글
·
post-thumbnail

[C++] 클래스 키워드

1. const 키워드 01-const 객체 const 키워드를 이용하여 변수를 상수화 하듯, 객체도 상수화 할 수 있다. const 객체의 의미 const 선언과 함께 만들어진 객체를 대상으로는 const 멤버 함수만 호출할 수 있다. 객체의 데이터 변경을 허용하지 않기 때문이다. → 객체 데이터값을 변경시킬 능력이 있는 함수(≠const 함수)는 아예 호출할 수 없도록 한다. const 객체 선언예시 02-함수 오버로딩에서 const 기본적으로 함수를 오버로딩 하려면 함수 호출시 확인하는 매개변수의 개수나 그 자료형이 달라야 한다. 함수 오버로딩에서는, 함수가 정의될 때 const 키워드의 유무로도 함수를 구분한다. 아래 두 함수는 서로 다른 함수이다! `void SimpleFunc() { . . . }

2022년 8월 10일
·
0개의 댓글
·

mutable vs immutable method

MM **Array.push() Array.pop() Array.shift() Array.unshift()** (4형제) Array.splice() IM Array.slice() Array.Concat() Array.join()

2022년 7월 7일
·
0개의 댓글
·

Immutable & Mutable

Mutable 객체는 생성된 이후에 상태가 변경될 수 있는 객체이고, Immutable 객체는 생성된 이후 상태가 변경되지 않는 객체를 말한다. JS에서 Object와 Array를 제외한 모든 타입은 Immutable한 타입이다. > > 변경이 불가능하다 라는 뜻은 재할당은 가능하지만, 메모리 영역에서의 변경이 불가능하다는 뜻이다. 타입 별 메소드중에서도 Immutable과 Mutable이 갈리는데, 아래는 그 예시이다. 일축하면, Immtable은 원본 데이터를 유지하려는 속성이고, Mutable은 원본데이터를 변화시키려는 속성이다.

2022년 6월 30일
·
0개의 댓글
·