320x100

Visual Studio 사용시 코드에서 한글이 있을 경우 아래와 같이 인코딩 문제가 발생한다.

 

 

인터넷에는 파일저장시 인코딩하여 저장하는 방법등 다양한 방법들이 소개되고 있지만 visual studio 프로그램 안에서 해결하는 방법들은 새로운 프로젝트 만들면 다시 설정해야되는 번거로움이 있다.

 

이러한 번거로움이 없이 인코딩 문제를 한번만 설정 해결 방법은 다음과 같다.

 

가장 핵심은 윈도우 인코딩 설정이 Visual studio 와 연동되어 있기 때문에 윈도우 인코딩 설정을 변경해줘야 한다.

 

1. 윈도우의 [설정] 창 열기

2. [시간 및 언어] 선택

3. [언어 및 지역] 선택

4. [기본 언어 설정] 선택

5. [관리자 옵션] 탭 선택

6. "유니코드를 지원하지 않는 프로그램용 언어" 에서  "시스템 로캘 변경"

7.  "Beta: 세계 언어 지원을 위해 Unicode UTF-8 사용" 에 체크

 

8. 확인 후 시스템 재시작 을 하고 Visual Studio 편집기 소스코드에 한글을 사용하고 출력해보자

 

반응형
320x100

아래와 같이 만들 가상환경의 이름과 파이썬 버전이 포함된 명령어를 입력한다.

 

conda create --name [가상환경이름] python=[파이썬버전]

 

아래 명령어를 이용하여 만들어진 가상환경을 확인할 수 있다.

 

conda info --envs

 

 

다음으로 만들어진 가상환경을 사용해보자. 

위에 리스트는 base 가장 기본 환경으로서 명령 프롬프트 앞에 (base) 가 현재 환경을 의미한다.

 

아래 명령어를 이용하여 만들어진 가상환경으로 이동하여 보자

 

conda activate [가상환경이름]

 

 

 

(py37) 로 환경이 이동된 것을 확인할 수 있다.

 

다음으로 base 환경으로 돌아와서 환경을 삭제해보자.

 

conda activate base   "base 환경으로 돌아가는 명령어"

conda remove --name [가상환경이름] --all

 

 

위와 같이 삭제 명령어 입력후 설치된 패키지도 함께 삭제할 것인지 물어본다. y 를 입력하고 깨끗하게 삭제하자.

 

 

완료 후 환경 리스트 명령어로 다시 확인하면 환경(py37)이 삭제된 것을 확인할 수 있다.

반응형
320x100

윈도우 11 설치시 네트워크 연결하지 않으면 설치를 진행할 수 없는 상황이 발생한다. 이때 네트워크 연결 건너뛰기 방법은 다음과 같다.

 

윈도우 11 설치시 네트워크 연결 페이지

 

위 화면에서 shift + F10 을 누르면 아래와 같이 검은 명령 프롬프트 화면이 나타납니다.

 

이 때 검은 화면창에 OOBE\BYPASSNRO 를 입력하고 Enter 키를 누릅니다.

 

그럼 재부팅이 되고 설치화면이 다시 나타나며, 네트워크 연결화면에서 아래와 같이 "인터넷에 연결되어 있지 않음" 이 나타나고 클릭후 다음 설치 화면으로 넘어간다.

반응형
320x100

엑셀을 사용중에 셀 이동을 해야 되는데 먹통이 되고 화면이 움직이는 경우가 있습니다.

 

이때 다음과 같은 2가지 방법으로 해결 할 수 있습니다.

 

일단 원인을 살펴 보면,

 

위 그림에서 빨간색 박스로 되어 있는 Scroll lock 이 설정된 경우 키보드의 방향키를 이용한 셀 이동이 안됩니다.

 

(1) Scroll Lock 을 해제 시키는 방법 1번째

 

키보드에는 Scroll Lock 키가 있습니다. 이 버튼을 한번 클릭해주시면 Scroll Lock 아래와 같이 해제 (Scroll Lock 글자가 사라짐) 되어  셀 이동이 잘 되는 것을 확인할 수 있습니다.

 

 

(2)  Scroll Lock 을 해제 시키는 방법 2번째(내 키보드에 버튼이 없을때)

 

엑셀의 오른쪽 아래 Scroll Lock 글자가 있는 위치에 마우스 포인트롤 위치시키고 마우스 오른쪽 버튼을 클릭(마우스 우클릭)하면 아래와 같이 메뉴 창이 나타납니다. 이때 메뉴에서 Scroll Lock 을 선택하면 Scroll Lock이 해제 되어 셀 이동이 잘 동작합니다.

반응형
320x100
# 원본 리스트 (내부에 리스트가 포함됨)
original_list = [1, [2, 3], 4]

# 깊은 복사 함수 정의
def deep_copy(obj):
    if isinstance(obj, list):
        # 리스트의 경우 요소를 새 리스트로 복사
        new_list = []
        for item in obj:
            new_list.append(deep_copy(item))  # 재귀적으로 요소를 복사
        return new_list
    else:
        # 리스트가 아닌 경우 (기본 자료형 등), 그대로 반환
        return obj

# 깊은 복사 수행
deep_copy_list = deep_copy(original_list)

# 원본과 복사본 출력
print("Original list:", original_list)
print("Deep copy:", deep_copy_list)

# 리스트 요소 변경 (깊이 1)
original_list[1][0] = 'A'

# 변경 후 출력
print("After deep copy, original list:", original_list)
print("After deep copy, deep copy:", deep_copy_list)

결과 설명:

  • deep_copy() 함수는 재귀적으로 리스트의 요소를 탐색하면서 모든 요소를 새로운 객체로 복사합니다.
  • 이 함수는 리스트를 인자로 받고, 리스트 내부의 모든 요소가 기본 자료형이 될 때까지 재귀적으로 호출하여 복사를 수행합니다.
  • original_list의 [2, 3] 부분은 새로운 리스트로 복사되어 deep_copy_list와 독립적인 객체가 됩니다.
  • 따라서 original_list를 변경해도 deep_copy_list에는 어떠한 영향도 미치지 않습니다.

실행 결과:

Original list: [1, [2, 3], 4]
Deep copy: [1, [2, 3], 4]
After deep copy, original list: [1, ['A', 3], 4]
After deep copy, deep copy: [1, [2, 3], 4]

이 예제에서는 copy 모듈을 사용하지 않고도 깊은 복사를 수행하는 간단한 방법을 구현했습니다. 하지만 파이썬의 copy.deepcopy() 함수는 이러한 복잡한 작업을 대신 처리해 주기 때문에 실제 프로덕션 환경에서는 copy 모듈을 사용하는 것이 좋습니다.

반응형
320x100

파이썬에서 객체를 복사할 때 얕은 복사(shallow copy)와 깊은 복사(deep copy)의 개념이 중요합니다. 이 두 가지 복사 방법은 객체의 중첩 구조와 상호작용 방식에 따라 다릅니다.

 

얕은 복사 (Shallow Copy)

얕은 복사는 객체를 복사할 때, 원본 객체의 요소들을 새로운 객체에 복사하지만, 요소들이 참조하는 객체들은 원본과 동일한 객체를 참조합니다. 즉, 복사된 객체와 원본 객체는 같은 객체를 공유하게 됩니다.

파이썬에서는 copy 모듈의 copy() 함수나 객체의 copy() 메서드를 사용하여 얕은 복사를 수행할 수 있습니다.

 

import copy

# 원본 리스트
original_list = [1, [2, 3], 4]

# 얕은 복사
shallow_copy = copy.copy(original_list)

# 원본과 복사본 출력
print("Original list:", original_list)
print("Shallow copy:", shallow_copy)

# 리스트 요소 변경 (깊이 1)
original_list[1][0] = 'A'

# 변경 후 출력
print("After shallow copy, original list:", original_list)
print("After shallow copy, shallow copy:", shallow_copy)

결과 설명:

  • original_list는 [1, [2, 3], 4]로 초기화됩니다.
  • shallow_copy는 copy.copy(original_list)를 통해 얕은 복사가 수행됩니다.
  • original_list의 두 번째 요소인 [2, 3]는 내부 리스트입니다.
  • original_list[1][0]을 'A'로 변경하면, original_list와 shallow_copy 모두에 영향을 미칩니다.
  • 이는 얕은 복사에서는 내부 리스트가 동일한 객체를 참조하기 때문에 발생하는 현상입니다.

실행 결과:

Original list: [1, [2, 3], 4]
Shallow copy: [1, [2, 3], 4]
After shallow copy, original list: [1, ['A', 3], 4]
After shallow copy, shallow copy: [1, ['A', 3], 4]

 

깊은 복사 (Deep Copy)

깊은 복사는 객체와 그 객체가 참조하는 모든 객체들까지 완전히 새로운 객체로 복사하는 방법입니다. 따라서 원본 객체와 복사된 객체는 완전히 독립적인 객체가 됩니다.

깊은 복사는 copy 모듈의 deepcopy() 함수나 객체의 copy.deepcopy() 메서드를 사용하여 수행할 수 있습니다.

 

import copy

# 원본 리스트
original_list = [1, [2, 3], 4]

# 깊은 복사
deep_copy = copy.deepcopy(original_list)

# 원본과 복사본 출력
print("Original list:", original_list)
print("Deep copy:", deep_copy)

# 리스트 요소 변경 (깊이 1)
original_list[1][0] = 'A'

# 변경 후 출력
print("After deep copy, original list:", original_list)
print("After deep copy, deep copy:", deep_copy)

결과 설명:

  • original_list는 [1, [2, 3], 4]로 초기화됩니다.
  • deep_copy는 copy.deepcopy(original_list)를 통해 깊은 복사가 수행됩니다.
  • original_list[1][0]을 'A'로 변경하더라도, deep_copy에는 어떠한 영향도 미치지 않습니다.
  • 이는 깊은 복사에서는 내부 리스트까지 새로운 객체로 복사하기 때문에 발생하는 현상입니다.

실행 결과:

Original list: [1, [2, 3], 4]
Deep copy: [1, [2, 3], 4]
After deep copy, original list: [1, ['A', 3], 4]
After deep copy, deep copy: [1, [2, 3], 4]

요약

  • 얕은 복사는 객체의 내용을 새로운 객체에 복사하지만, 내부 객체들은 원본과 동일한 객체를 참조합니다.
  • 깊은 복사는 객체와 그 객체가 참조하는 모든 객체들까지 새로운 객체로 복사하여 완전히 독립적인 복사본을 생성합니다.
  • 객체의 중첩 구조가 복잡할 때는 깊은 복사를 사용하여 예기치 않은 부작용을 방지하는 것이 좋습니다.
반응형

+ Recent posts