Menu
CoddyTech

딕셔너리 복사

Coddy GDScript 여정의 논리와 흐름 섹션에 포함된 레슨. 78개 중 22번째.

딕셔너리를 다른 변수에 할당해도 복사되는 것은 아닙니다. 두 변수는 같은 딕셔너리를 참조하므로, 한쪽을 통해 변경하면 다른 쪽에도 반영됩니다:

var template := {"type": "slime", "hp": 30}
var enemy := template
enemy["hp"] = 10
print(template["hp"]) # 10

duplicate()는 동일한 쌍을 가진 새 딕셔너리를 만듭니다. 복사본을 변경해도 원본은 그대로 유지됩니다:

var original := {"type": "slime", "hp": 30}
var copy := original.duplicate()
copy["hp"] = 99
print(original["hp"]) # 30

duplicate()는 얕은 복사를 만듭니다. 복사본은 자체 쌍을 가지지만, 배열이나 딕셔너리인 값은 두 객체에서 여전히 공유됩니다.

var hero := {"stats": {"hp": 100}, "items": ["sword"]}
var clone := hero.duplicate()
clone["stats"]["hp"] = 1
clone["items"].append("shield")
print(hero)
{ "stats": { "hp": 1 }, "items": ["sword", "shield"] }

깊은 복사를 하려면 true를 전달하세요. duplicate(true)는 내부의 모든 배열과 딕셔너리도 복사하므로 두 객체는 아무것도 공유하지 않습니다.

var twin := hero.duplicate(true)
twin["stats"]["hp"] = 50
print(hero["stats"]["hp"]) # 1

모든 값이 숫자, 문자열 또는 불리언이면 얕은 복사로 충분합니다. 값이 배열이나 딕셔너리인 경우에는 duplicate(true)를 사용하세요. 배열도 같은 방식으로 작동합니다. grid.duplicate(true)는 2차원 배열과 그 행을 함께 복사합니다.

challenge icon

챌린지

쉬움

템플릿에서 적 무리를 생성하세요. 사전 template이 주어집니다. 프로그램은 한 줄에 하나씩 두 개의 정수를 읽습니다. 생성할 적의 수(n)와 hp 보너스입니다.

1부터 n까지 각 적 번호 i에 대해:

  1. template과 아무것도 공유하지 않는 복사본을 만듭니다.
  2. 값이 i인 키 "id"를 추가합니다.
  3. "stats" 안의 "hp"에 bonus * i를 더합니다.
  4. 마지막 적이면 해당 적의 "loot"에 "crown"을 추가합니다.
  5. 적을 출력합니다.

마지막으로 Template: 뒤에 템플릿을 출력합니다. 템플릿은 변경되지 않아야 합니다. 입력이 2와 10일 때 출력은 다음과 같습니다.

{ "type": "slime", "stats": { "hp": 40, "speed": 2 }, "loot": ["gel"], "id": 1 }
{ "type": "slime", "stats": { "hp": 50, "speed": 2 }, "loot": ["gel", "crown"], "id": 2 }
Template: { "type": "slime", "stats": { "hp": 30, "speed": 2 }, "loot": ["gel"] }

직접 해보기

extends Node

func _ready():
	var template := {"type": "slime", "stats": {"hp": 30, "speed": 2}, "loot": ["gel"]}
	var n := int(OS.read_string_from_stdin())
	var bonus := int(OS.read_string_from_stdin())

	# n마리의 적을 생성하고 출력하세요

	# template을 출력하세요
	pass
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리와 흐름의 모든 레슨

직접 연습해 보세요: 온라인 GDScript 컴파일러