class Glass {
    var id: Int
    init (id: Int) {
        self.id = id
    }
}
let glass1 = Glass(id: 1)
let glass2 = Glass(id: 2)

struct Cow {
    class Stomach {
        var food: Glass? = nil

        func copy() -> Stomach {
            let stomach = Stomach()
            stomach.food = food
            return stomach
        }
    }
    var stomach = Stomach()

    mutating func eat(_ food: Glass) {
        if !isKnownUniquelyReferenced(&stomach) {
            stomach = stomach.copy()
        }
        stomach.food = food
    }
}

var cow1 = Cow()
cow1.eat(glass1)
let cow2 = cow1

cow1.eat(glass2)

print(cow2.stomach.food?.id)