Can this be done for free? also please mention wallets who do not charge transaction fee (if they exists)
If you transfer them by means of sending them from one address to another, it will require a transaction fee to buy the necessary blockchain space to get it confirmed.
If you just export the private keys from one wallet and import them to another, this is free.
Note: Many webwallet services take full custody of your bitcoins, and do not keep money in separate addresses for each user. Thus, they will be both unwilling and unable to provide you the private key for importing elsewhere. Also, this would be antithetical, as any private key known to another party should be considered insecure and not used any further.
No, you don't have to pay the transaction fees if you want to switch to a different wallet. If you have the private key of the first one, just import it into the second one and there you go.