This seems to work, but is it the best way to implement a deep clone?

Code:
Public Class Person
    Public Property name() As String
    Public Property numbers As List(Of Integer)
    Public Function MakeACopy() As Person
        Dim newone As Person
        newone = DirectCast(Me.MemberwiseClone(), Person)
        newone.numbers = New List(Of Integer)
        For i = 0 To Me.numbers.Count - 1
            newone.numbers.Add(Me.numbers(i))
        Next
        Return newone
    End Function
End Class
Module Module1

    Sub Main()
        Dim Aperson As New Person
        Aperson.name = "Alpha"
        Aperson.numbers = New List(Of Integer)
        For i = 1 To 5
            Aperson.numbers.Add(i)
        Next
        Dim Bperson As New Person
        Bperson = Aperson.MakeACopy

        Bperson.name = "Beta"
        Console.WriteLine(Aperson.name & ":" & Bperson.Name)
        Bperson.numbers.Clear()
        For i = 6 To 10
            Bperson.numbers.Add(i)
        Next
        For i = 0 To 4
            Console.WriteLine(Aperson.numbers(i).ToString & ":" & Bperson.numbers(i).ToString)
        Next
        Console.Read()

    End Sub

End Module