Here's the code:
ValuesDict = {}
PathwayTemplate = {}
GenerationDictionary = {0:[]}
StartNumbers = [2,3,5,7]
for Number in StartNumbers:
    PathwayTemplate.update({Number:0})
for Number in StartNumbers:
    ValuesDict.update({Number:[PathwayTemplate.copy()]})
    ValuesDict[Number][0][Number] += 1
    GenerationDictionary[0].append(Number)
Fin = 15
Gen = 0
while min(GenerationDictionary[Gen])<=Fin:
    Gen += 1
    GenerationDictionary.update({Gen:[]})
    for Number in GenerationDictionary[Gen-1]:
        for StartNumber in StartNumbers:
            if (Number+StartNumber) in ValuesDict.keys():
                pass
            else:
                ValuesDict.update({(Number+StartNumber):list(ValuesDict[Number])})
                for subpath in ValuesDict[(Number+StartNumber)]:
                    subpath[StartNumber]+=1
                GenerationDictionary[Gen].append((Number+StartNumber))
                print((Number+StartNumber),ValuesDict[(Number+StartNumber)])
    print()
And under first iteration it outputs:
4 [{2: 2, 3: 0, 5: 0, 7: 0}]
9 [{2: 2, 3: 0, 5: 0, 7: 1}]
6 [{2: 0, 3: 2, 5: 0, 7: 0}]
8 [{2: 0, 3: 2, 5: 1, 7: 0}]
10 [{2: 0, 3: 2, 5: 1, 7: 1}]
12 [{2: 0, 3: 0, 5: 1, 7: 1}]
14 [{2: 0, 3: 0, 5: 0, 7: 2}]
Where I expected it to give me one 2 and one 7 under 9.
It's meant to add numbers together and store number added as a result.
I tried reading about Python 3 saving memory and making a pointer type link when a=bso when a changes, so does b, but it'd appear that they are linked here despite being re-cast as a list. I've also tried checking if a is b and it gave me false, however it clearly seems to auto-update my original ValuesDict[Number].
