I am using Scapy to capture packets by using the following code
from scapy.all import *
def verify(p):
p.display()
sniff(prn=verify, iface=\"lo\")
This is expected behavior. Scapy sees the packets on the loopback interface both when they "leave" and when they "arrive." So everything is duplicated with no distinction, because loopback is a special interface. Perhaps you should yourself just skip every second packet.
It was reported as a bug once, but rejected: https://bitbucket.org/secdev/scapy/issues/887/sniff-sends-packets-twice