the string value is, as we should expect, exactly what we put in
% lindex $a 0
abc\/cde/A[0]
using $a as a list in a list command forces the string to be treated as
the representation of a list - in which backslashes have meaning, so one
is removed according to that meaning
% set b {abc\/cde/A[0]}
abc\/cde/A[0]
% lsearch -exact $a $b
0
which show a match with the real value of a list element.
But
% set c [list {abc\\/cde/A[0]}]
{abc\\/cde/A[0]}
% lindex $c 0
abc\\/cde/A[0]
% lsearch -exact $c $a
0
which shows the right way to create a list.
Your original question turned out to be about matching options, but this
one is about the difference between the members of a list and the string
which represents the whole list.