Assigning a struct value makes an independent copy.

Change one copy

newScore
struct_copy.swift
Replay: real traced execution (multi-file project)
struct Player {
    var name: String
    var score: Int
}

let newScore = 12
let original = Player(name: "Ari", score: 10)
var copy = original
copy.score = newScore
let message = "\(original.score)->\(copy.score)"

print(message)
struct Player {
    var name: String
    var score: Int
}

let newScore = 7
let original = Player(name: "Ari", score: 10)
var copy = original
copy.score = newScore
let message = "\(original.score)->\(copy.score)"

print(message)
struct Player {
    var name: String
    var score: Int
}

let newScore = 18
let original = Player(name: "Ari", score: 10)
var copy = original
copy.score = newScore
let message = "\(original.score)->\(copy.score)"

print(message)
  1. newScore ← 12, original ← Player(name: "Ari", score: 10), copy ← Player(name: "Ari", score: 10)

    6let newScore→ 12 = 12  //@newScore=7, 187let original→ Player(name: "Ari", score: 10) = Player(name: "Ari", score: 10)8var copy→ Player(name: "Ari", score: 10) = originalPlayer(name: "Ari", score: 10)9copy.score→ 12 = newScore1210let message→ 10->12 = "\(original.score10)->\(copy.score12)"1112print(message10->12)
    output10->12
  1. newScore ← 7, original ← Player(name: "Ari", score: 10), copy ← Player(name: "Ari", score: 10)

    6let newScore→ 7 = 77let original→ Player(name: "Ari", score: 10) = Player(name: "Ari", score: 10)8var copy→ Player(name: "Ari", score: 10) = originalPlayer(name: "Ari", score: 10)9copy.score→ 7 = newScore710let message→ 10->7 = "\(original.score10)->\(copy.score7)"1112print(message10->7)
    output10->7
  1. newScore ← 18, original ← Player(name: "Ari", score: 10), copy ← Player(name: "Ari", score: 10)

    6let newScore→ 18 = 187let original→ Player(name: "Ari", score: 10) = Player(name: "Ari", score: 10)8var copy→ Player(name: "Ari", score: 10) = originalPlayer(name: "Ari", score: 10)9copy.score→ 18 = newScore1810let message→ 10->18 = "\(original.score10)->\(copy.score18)"1112print(message10->18)
    output10->18
value semantics A struct assignment copies stored values, so changing one variable leaves the other variable unchanged.