Clone an undirected graph return deep copy

Given a reference of a node in a connected undirected graph, return a deep copy (clone) of the graph. Each node in the graph contains a val (int) and a list (List[Node]) of its neighbors. https://leetcode.com/problems/clone-graph/

Trying to solve this problem off of leetcode and not sure exactly where I'm stuck and how to get to the correct solution

Example:

class Solution(object):
    def cloneGraph(self, node):
        newNode = Node(node.val, [])
        oldNode = node
        dic = {}
        dic[oldNode] = newNode
        bfs = [oldNode]
        while bfs: 
            oldNode = bfs.pop(0)
            newNode = dic[oldNode]
            neighbors = []
            for item in oldNode.neighbors: 
                if item not in dic: 
                    copy = Node(item.val, [])
                    dic[item] = copy
                    neighbors.append(copy)
                    bfs.append(item)
                else: 
                    copy = dic[item]
                    neighbors.append(copy)
            newNode.neighbors = neighbors
        return newNode